2011-05-02 75 views
0

我遇到了以下情况:我的表格单元格上挂接了UISwipeGestureRecognizer。在滑动时,两个按钮的隐藏状态切换为NO将值返回父视图

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

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

+0

如果您可以控制视图层次结构,那么'superview'属性可能会有所帮助。 – 2011-05-02 12:16:42

回答

1

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

但是协议是一种简单的方法,在创建表格视图单元格后,您可以将视图控制器(它创建表格视图)分配给单元格内容视图的所有操作的委托。

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

@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

+0

谢谢,你说得对。这听起来不符合逻辑:)对于我来说,一些示例代码会非常有帮助,谢谢你的时间:D – Joetjah 2011-05-02 11:03:08

+0

@Praveen S:你有使用协议的好例子吗?我想使用它,但在互联网/论坛上的所有例子对我来说都是模糊的... – Joetjah 2011-05-02 13:03:14

+0

当然,现在编辑我的帖子 – 2011-05-02 13:14:33