Ios 在TableView中获取UIViewController';s客户单元
我有一个名为“MainView”的Ios 在TableView中获取UIViewController';s客户单元,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个名为“MainView”的UIViewController,还有一个名为“tblLists”的UITableView tblLists生成customCell-“customCellList” 我的问题是能否在customCellList类中获取MainView的实例(self)。 我尝试了superview,但没有得到MainView。我想在没有协议的情况下实现这一点 所以在这方面需要你的帮助。你所要求的不是一个好主意,你应该找到另一种解决办法。它打破了MCV模式。 顺便说一句,如果您
UIViewController
,还有一个名为“tblLists”的UITableView
tblLists
生成customCell
-“customCellList”
我的问题是能否在customCellList
类中获取MainView
的实例(self)。我尝试了superview,但没有得到
MainView
。我想在没有协议的情况下实现这一点
所以在这方面需要你的帮助。你所要求的不是一个好主意,你应该找到另一种解决办法。它打破了MCV模式。 顺便说一句,如果您担心使用ARC和目标iOS>=5的内存问题,您可以创建对表视图本身的弱引用,并将视图控制器作为其委托或数据源属性(当然,如果VC是其中之一)。也可以创建对VC本身的弱引用
正如评论中所指出的,这不是一个好主意,最好换一种方法。如果需要更新单元格值,有很多方法可以重新加载tableview数据!通过在模型的VC上使用KVO、通知、委托等,您可以简单地触发对表视图的重新加载,而不需要在单元格中包含奇怪的引用
希望这能有所帮助。你所问的不是一个好主意,你应该找到另一种解决办法。它打破了MCV模式。 顺便说一句,如果您担心使用ARC和目标iOS>=5的内存问题,您可以创建对表视图本身的弱引用,并将视图控制器作为其委托或数据源属性(当然,如果VC是其中之一)。也可以创建对VC本身的弱引用
正如评论中所指出的,这不是一个好主意,最好换一种方法。如果需要更新单元格值,有很多方法可以重新加载tableview数据!通过在模型的VC上使用KVO、通知、委托等,您可以简单地触发对表视图的重新加载,而不需要在单元格中包含奇怪的引用
希望这有帮助。您可以使用响应器链访问视图控制器。假设customCell类是UITableViewCell子类,则应使用以下方法执行此任务:
@implementation customCell
- (UIViewController *)getViewController
{
id vc = [self nextResponder];
while(![vc isKindOfClass:[UIViewController class]] && vc!=nil)
{
vc = [vc nextResponder];
}
return vc;
}
@end
上述代码由框架提供。您可以使用响应器链访问视图控制器。假设customCell类是UITableViewCell子类,则应使用以下方法执行此任务:
@implementation customCell
- (UIViewController *)getViewController
{
id vc = [self nextResponder];
while(![vc isKindOfClass:[UIViewController class]] && vc!=nil)
{
vc = [vc nextResponder];
}
return vc;
}
@end
上述代码由框架提供。您还可以访问rootViewController:
UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;
您还可以访问rootViewController:
UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;
当你想要打破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
}
当你想要打破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
}
我有类似的问题,我的情况是当表视图自定义单元格中
textfield
的值更改时,在视图控制器中更改数组
我的解决方案是在
tableview
的cellForRowAt
方法中为uitextfield
添加委托,然后我可以在textfielddendediting
方法中更改所有数据。因为它们都在一个类中,ViewController
类。我有类似的问题,我的情况是当表视图自定义单元格中的textfield
的值更改时,更改View Controller中的数组
我的解决方案是在
tableview
的cellForRowAt
方法中为uitextfield
添加委托,然后我可以在textfielddendediting
方法中更改所有数据。因为它们都在一个类中,ViewController
类。为什么要获取对表视图的引用?我认为这可能不是一个好的设计。单元格不需要访问它所在的视图控制器。你想达到什么目标?很可能有更好的方法。我认为在Objective-c中使用协议是一种方法。很抱歉,没有太大帮助。我需要主视图字典的实例,并在customcell中更新它的值。它处理自定义单元格控件的配置。这就是为什么@BaZinga视图应该有数据显示。视图不应接触视图控制器以获取其数据。为什么要获取对表视图的引用?我认为这可能不是一个好的设计。单元格不需要访问它所在的视图控制器。你想达到什么目标?很可能有更好的方法。我认为在Objective-c中使用协议是一种方法。很抱歉,没有太大帮助。我需要主视图字典的实例,并在customcell中更新它的值。它处理自定义单元格控件的配置。这就是为什么@BaZinga视图应该有数据显示。视图不应接触视图控制器以获取其数据。如果其中包含用于获取单元格视图控制器的代码,则可能会从Sensible更改其名称如果其中包含用于获取单元格视图控制器的代码,则可能会从SensibleHi@KDeogharkar更改其名称,请标记正确答案?您好@KDeogharkar,请您标记一个正确的答案好吗?