将值返回到父视图

时间:2011-05-02 09:56:18

标签: iphone objective-c view protocols

我遇到以下情况:我的表格单元格上有一个UISwipeGestureRecognizer。在滑动时,两个按钮将其.hidden-status切换为NO

这些细胞是定制的。意思是,那些按钮的IBAction在那个控制器中。现在,我希望这些自定义单元格中的UIButton将变量发送回父视图。该父视图是UIViewController(包含UITableView)。

我该怎么做?我已经阅读过协议,但我无法得到一个可靠的例子......或者还有其他想法吗?他们都欢迎:))

1 个答案:

答案 0 :(得分:1)

您所遵循的方法可能会导致崩溃或内存泄漏,因为您必须保留uitableview单元格内容的控制器。

然而,协议是一种简单的方法,在创建表视图单元后,您可以将viewcontroller(创建表视图)分配为单元内容视图的所有操作的委托。

在自定义单元格的控制器中,只需调用委托方法,它将由父视图处理。 这可能听起来令人困惑,但它非常简单。将尝试发布示例代码。

@protocol yourDelegate;

@interface yourViewController{
id<yourDelegate> delegate;
}
@property (nonatomic,assign) id<yourDelegate> delegate;
@end
@protocol yourDelegate
- (void)passThisActionToMainController;
- (void)passThisEventToMainController;
@end

在表视图单元视图控制器中完成上述操作后,在主控制器中创建视图控制器的实例,然后

controller.delegate = self;

当用户点击或执行任何操作时,在单元格的视图控制器中,然后调用

[delegate passThisActionToMainController];

[delegate passThisEventToMainController];

这样您的主控制器就可以获取事件并进行处理。

执行此操作的替代方法是在创建单元格并处理事件时创建按钮。我会推荐这种方法。

[myButton addTarget:self action:@selector(whatMyButtonShouldDo:)   
  forControlEvents:UIControlEventTouchUpInside];

上述行是从答案here复制而来。