Coder Social home page Coder Social logo

Comments (10)

jzhang0480 avatar jzhang0480 commented on July 28, 2024

如果你是和我demo里面一样,用的override func setSelected(_ selected: Bool, animated: Bool) {}方法实现的单选,那你
需要加一行item2.selectionStyle = .default, 并且去掉setSelectionHandler回调里面的self.manager.reload()
原因是ZJExpandTreeCellItem类里面默认把选中效果关掉了。不需要reload()的原因是这是系统的选中方法,系统有实现,不需要自己手动刷新tableView。

from zjtableviewmanager.

Shameless521 avatar Shameless521 commented on July 28, 2024

我按照您的方法试了一下,没有打到预期的效果,可能是我的写的不对,你看我用自己的理解写了一下,但是有一个问题,选中完三级以后,我想吧二级展开,但是这种情况下,展开是有问题的,麻烦您帮我看下。

func setShowData() {
     manager.add(section: section)

     guard let listModel = self.model else {
         return
     }
     
     let linelistModel = listModel.resultLineInfo

     for item in linelistModel! {
         let item0 = ServerListTitleItem()
         item0.model = item
         item0.isExpand = true
         item0.cellHeight = SXRealValue(55)
         section.add(item: item0)
         
         for group in item.groupList! {
             let item1 = ServerVideoItem()
             item1.model = group
             item1.cellHeight = SXRealValue(60)
             item0.addSub(item: item1, section: section)

             for vmess in group.vmessList! {
                 let item2 = ServerContentItem()
                 item2.model = vmess
                 if vmess.flagId == self.selectModel?.flagId {
                     item2.isSelect = true
                 }else {
                     item2.isSelect = false
                 }

                 item2.cellHeight = SXRealValue(55)
                 item1.addSub(item: item2, section: section)
                 
                 item2.setSelectionHandler { (vmessModel: ServerContentItem) in
                     
                     self.selectModel = vmessModel.model
                     self.section.removeAllItems()
                     self.manager.removeAllSections()
                     self.setShowData()
                 }
             }
         }
     }
     
     manager.reload()
 }

from zjtableviewmanager.

Shameless521 avatar Shameless521 commented on July 28, 2024

如果你是和我demo里面一样,用的override func setSelected(_ selected: Bool, animated: Bool) {}方法实现的单选,那你
需要加一行item2.selectionStyle = .default, 并且去掉setSelectionHandler回调里面的self.manager.reload()
原因是ZJExpandTreeCellItem类里面默认把选中效果关掉了。不需要reload()的原因是这是系统的选中方法,系统有实现,不需要自己手动刷新tableView。

我刚才用您的方法试了一下,有效果,但是在点击二级的时候,三级的选中效果会失效,不知道是什么原因。而且没有默认的选中效果。

from zjtableviewmanager.

jzhang0480 avatar jzhang0480 commented on July 28, 2024

哦,这个我没考虑到,这个应该是系统的方法的缺陷了。我看你一开始提供的代码,isSelect属性应该是你自己定义的吧,然后在cell里面根据isSelect显示不同的样式。那还是用你自定义的选中方法吧,再有问题的话最好提供个简化的demo

                item2.setSelectionHandler { (vmessModel: ServerContentItem) in    
                    // 找出当前同级的所有cell选中状态设置为false
                    let sameLevelItems = vmessModel.superLevelItem?.getAllBelowItems().filter({$0.level == vmessModel.level})
                    for item in sameLevelItems! {
                            item.isSelect = false
                    }                  
                    vmessModel. isSelect = true//当前点击中的cell选中状态设置为true
                    self.selectModel = vmessModel.model
                    self.manager.reload()
                }

from zjtableviewmanager.

Shameless521 avatar Shameless521 commented on July 28, 2024

哦,这个我没考虑到,这个应该是系统的方法的缺陷了。我看你一开始提供的代码,isSelect属性应该是你自己定义的吧,然后在cell里面根据isSelect显示不同的样式。那还是用你自定义的选中方法吧,再有问题的话最好提供个简化的demo

                item2.setSelectionHandler { (vmessModel: ServerContentItem) in    
                    // 找出当前同级的所有cell选中状态设置为false
                    let sameLevelItems = vmessModel.superLevelItem?.getAllBelowItems().filter({$0.level == vmessModel.level})
                    for item in sameLevelItems! {
                            item.isSelect = false
                    }                  
                    vmessModel. isSelect = true//当前点击中的cell选中状态设置为true
                    self.selectModel = vmessModel.model
                    self.manager.reload()
                }

其实最关键的就是页面数据没有刷新,如果方便的化,能给我一个联系方式么,我给您demo

from zjtableviewmanager.

jzhang0480 avatar jzhang0480 commented on July 28, 2024

就用你最初提问的时候的代码,在item2.setSelectionHandler里面按照我前一个回复改一下应该就行了。还是不行的话,你demo发我邮箱吧[email protected]

from zjtableviewmanager.

Shameless521 avatar Shameless521 commented on July 28, 2024

就用你最初提问的时候的代码,在item2.setSelectionHandler里面按照我前一个回复改一下应该就行了。还是不行的话,你demo发我邮箱吧[email protected]

刚试了一下,还是不行,我已经把简易demo发您邮箱了,麻烦您了

from zjtableviewmanager.

jzhang0480 avatar jzhang0480 commented on July 28, 2024

你说还是不行,但是没说具体问题。我看了一下你的demo,我猜你说不行的原因是现在只在单击的那个cell所在的展开区域内有效。如果需要在整个tableview范围内实现单选,那就把
let sameLevelItems = vmessModel.superLevelItem?.getAllBelowItems().filter({$0.level == vmessModel.level})
改成
let sameLevelItems = self.section.items.filter({($0 as! ZJExpandTreeCellItem).level == vmessModel.level})

from zjtableviewmanager.

Shameless521 avatar Shameless521 commented on July 28, 2024

你说还是不行,但是没说具体问题。我看了一下你的demo,我猜你说不行的原因是现在只在单击的那个cell所在的展开区域内有效。如果需要在整个tableview范围内实现单选,那就把
let sameLevelItems = vmessModel.superLevelItem?.getAllBelowItems().filter({$0.level == vmessModel.level})
改成
let sameLevelItems = self.section.items.filter({($0 as! ZJExpandTreeCellItem).level == vmessModel.level})

非常感谢,这个问题解决了,但是还有一个问题。第一次进来,默认会有问题。
Simulator Screen Shot - iPhone Xʀ - 2020-07-05 at 18 21 16
Simulator Screen Shot - iPhone Xʀ - 2020-07-05 at 18 21 17

from zjtableviewmanager.

jzhang0480 avatar jzhang0480 commented on July 28, 2024

这个应该是你设置默认的isselect=true的时候出问题导致的,断点调试一下吧。

from zjtableviewmanager.

Related Issues (11)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.