我有一个UIViewController
名为“MainView”,另一个UITableView
名为“tblLists”
tblLists
生成customCell
-“customCellList”。
我的问题是我可以在课堂上获得MainView
's instance(self) 吗?customCellList
我尝试了 superview 的东西,但没有得到MainView
。我想在没有协议的情况下实现这一点。
所以需要你的帮助。
我有一个UIViewController
名为“MainView”,另一个UITableView
名为“tblLists”
tblLists
生成customCell
-“customCellList”。
我的问题是我可以在课堂上获得MainView
's instance(self) 吗?customCellList
我尝试了 superview 的东西,但没有得到MainView
。我想在没有协议的情况下实现这一点。
所以需要你的帮助。
您可以使用响应者链来访问视图控制器。假设您的 customCell 类是 UITableViewCell 子类,以下方法应该可以完成这项工作:
@implementation customCell
- (UIViewController *)getViewController
{
id vc = [self nextResponder];
while(![vc isKindOfClass:[UIViewController class]] && vc!=nil)
{
vc = [vc nextResponder];
}
return vc;
}
@end
以上代码由Sensible TableView框架提供。
你问的不是一个好主意,你应该找到另一种方法。它打破了 MCV 模式。顺便说一句,如果您担心使用 ARC 并针对 iOS>=5 的内存问题,您可以创建对表视图本身的弱引用并将视图控制器作为其委托或数据源属性(当然,如果 VC 是其中之一他们)。或者,您可以创建对 VC 本身的弱引用。
正如评论中指出的那样,这不是一个好主意,最好找到另一种方法。如果您需要更新单元格值,有很多方法可以重新加载 tableview 数据!通过在模型中的 VC 上使用 KVO、通知、委托等,您可以简单地触发重新加载到表视图,而不会涉及单元格中的奇怪引用。
希望这可以帮助。
对于那些你想打破 MVC 的罕见情况。这假设你正在使用导航控制器作为窗口上的 rootVC。为 Swift 2 更新
func visibleVC() -> UIViewController? {
if let navVC: UINavigationController = UIApplication.sharedApplication().keyWindow?.rootViewController as? UINavigationController {
if let vc: UIViewController = navVC.visibleViewController as? MyViewControllerClass {
return vc
}
}
return nil
}
您还可以访问 rootViewController:
UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;
我有类似的问题,我的情况是当textfield
Table View 自定义单元格中的值更改时更改 View Controller 中的数组。
UITextFiled
我的解决方案是在cellForRowAt
方法中添加委托tableview
,然后我可以在textFieldDidEndEditing
方法中更改所有数据。因为他们都在一个班级,ViewController
班级。