从 UIViewController 子类化时如何访问 UITableViewController 属性?
我对 UIViewController 进行了子类化,为所有 UIViewController 提供通用功能(例如,我重写了 viewDidLoad 方法)。我的应用程序使用一堆视图控制器,这些视图控制器排列在选项卡栏控制器和导航控制器内。一切都很好,除了我有一个 UITableViewController。我想继承的不是它,而是我的自定义 MyUIViewController。我可以通过实现数据源和委托协议来使表正常工作:
@interface MaschinenTableViewController : MyUIViewController <UITableViewDataSource, UITableViewDelegate>
但是在这种情况下,我无权访问 UITableViewController 属性。例如,我无法更改表行选择的行为,因为 self 是 MyUIViewController 而不是 UITableViewController:
self.clearsSelectionOnViewWillAppear = YES;
是否有访问这些属性的解决方法?
I have subclassed UIViewController to provide common functionality for all UIViewControllers (for example I'm overriding viewDidLoad method). My app uses a bunch of view controllers that are arranged inside tab bar controller and in navigation controllers. Everything is OK, except the fact I have one UITableViewController. I would like to subclass not it but my custom MyUIViewController. I'm able to get the table working by implementing data source and delegate protocols:
@interface MaschinenTableViewController : MyUIViewController <UITableViewDataSource, UITableViewDelegate>
However in this case, I do not have an access to UITableViewController properties. For example, I cannot change the behavior of table row selection because self is MyUIViewController not UITableViewController:
self.clearsSelectionOnViewWillAppear = YES;
Are there any workarounds for accessing those properties?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您还可以将 UITableViewController 子类为 MyUITableViewController,实现您想要的行为,然后将 MyUITableViewController 作为变量放入 MyUIViewController。
You could also subclass UITableViewController as MyUITableViewController, implementing the behavior you want, and then put a MyUITableViewController as variable to your MyUIViewController.
与西蒙·李 提到使用委托。
但没有在任何地方存储索引,在 didSelectRowAtIndexPath 方法的末尾调用了 deselectRowAtIndexPath。到目前为止为我工作没有任何问题。
Did the same as Simon Lee mentioned using the delegate.
But without storing the index anywhere, at the end of didSelectRowAtIndexPath method called the deselectRowAtIndexPath. Worked for me no issues so far.
在这种情况下,您需要将 UITableView 变量添加到标题中,并在 viewDidLoad 中对其进行适当设置,然后将其添加到您的视图中。从这一点来看,它将像 UITableViewController 一样工作(本质上这就是它所做的一切!)
看看 我的文章采用了这种方法。
In this case you will need to add a UITableView variable to the header and set it up appropriately in viewDidLoad, and add it to your view. From this point it will work as a UITableViewController will (as essentially that's all it does!)
Take a look at my article here which takes this approach.