我这样做是通过为每个UItableVIEwCell设置一个实例化的UIVIEwController引用,然后在UItableVIEwCell状态更改时调用一个函数CancelDelete().
代码似乎效率低下,因为对于每个MyCell,我首先将占位符MyVIEwContoller实例化为公共变量,然后在UItableVIEw初始化时将其替换为引用UIVIEwController.
有一个更好的方法吗?
class MyCell : UItableVIEwCell{ var prevIoUsstate : UItableVIEwCellStateMask = UItableVIEwCellStateMask.allZeros // This holds a reference to the parent vIEw controller // Seems wasteful to instantiate since it gets replaced var controller:MyVIEwController = MyVIEwController() // This is called when the user aborts edit mode overrIDe func willTransitionToState(state: UItableVIEwCellStateMask) { if state & UItableVIEwCellStateMask.ShowingEditControlMask != nil { if prevIoUsstate & UItableVIEwCellStateMask.ShowingDeleteConfirmationMask != nil { // send notification to controller controller.CancelDelete(self) } } prevIoUsstate = state } }class MyVIEwController: UIVIEwController,UItableVIEwDataSource,UItableVIEwDelegate { func tableVIEw(tableVIEw: UItableVIEw,cellForRowAtIndexPath indexPath: NSIndexPath) -> UItableVIEwCell { // Give cell access to this controller var cell:MyCell = tableVIEw.dequeueReusableCellWithIDentifIEr("cell") as MyCell cell.controller = self cell.tag = indexPath.row } // This is called from the table cell func CancelDelete(cell:MyCell) { editbuttons[cell.tag].hIDden = false }}解决方法 将控制器的类型更改为MyVIEwController!而不是MyVIEwController.另外,将其设置为默认值nil.
控制器的声明应如下所示:
var controller: MyVIEwController! = nil
如果您对以感叹号(!)结尾的类型有任何疑问,请查看:
https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html(在名为Optionals的部分中).
以上是内存溢出为你收集整理的在UITableViewCell和UIViewController之间进行通信的最佳方式全部内容,希望文章能够帮你解决在UITableViewCell和UIViewController之间进行通信的最佳方式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)