我正在开发一个应用程序,其中UITableView
的所有UIViewControllers
都具有UITableView
的共同结构。
所以我创建了一个包含公共结构的UIViewController
子类,然后我将此视图添加到UITableView
。
UIButton
正在正常显示,但我需要将{添加到UITableViewCell
的目标添加到我ViewController
的自定义UIViewController
中,方法写在{{1}}中。
有人可以告诉我如何实现这个目标吗?
答案 0 :(得分:1)
您需要处理程序设计才能解决此问题。但是你已经走得足够远了回去&改变你的设计。所以对你来说,更好的选择是NSNotificationCenter
。
对于您的情况,请执行以下操作:
在编写方法的viewController中,假设方法名称为myX-Method:
(执行按钮的目标功能),然后在此控制器的viewDidLoad
中添加此行。
-(void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myX-Method:) name:@"NOTIFY_CUSTOM_BUTTON" object:nil];
}
现在,在您的UITableViewCell
课程中,将本地方法设置为按钮,就像我们通常所做的那样,让我们说,myLocalMethod:
现在在本地方法中,发布这样的通知消息。例如,我只是将当前单元格的按钮文本作为消息传递给通知。
-(void) myLocalMethod:(UIButton *)button{
[[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFY_CUSTOM_BUTTON" object: button.title];
}
这样您就不必依赖委托了。使用通知对象在myX-Method:
中收集您的值,如下所示:
-(void)myX-Method:(NSNotification *)dict {
NSString *buttonTitle = [dict valueForKey:@"object"];
NSLog(@"Button Clicked : %@", buttonTitle);
}
希望这个简单的解决方案能够解决您的目的。
请参阅here以获取示例代码。但是,在示例代码项目中,请搜索NSNotificationCenter
答案 1 :(得分:0)
您可以在tableView中将单元格委托设置为视图控制器:cellForRowAtIndexPath:
然后当在单元格内按下按钮时,您可以在单元格中的buttonPressed:方法内触发委托方法。
所以单元格调用 cell.delegate 这是viewController
在CellView.h中
@property (nonatomic, weak) id delegate;
在CellView.m中
- (void)buttonPressed:(id)sender {
[self.delegate cellButttonPressed:sender];
}
在MyTableViewController.m
中- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
CellView *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.delegate = self;
return cell;
}
- (void)cellButttonPressed:(id)sender {
//button action code here
}
答案 2 :(得分:0)
使用委托方法示例
制作UITableViewCell的子类
声明代表方法
@protocol CustomCellDelegate <NSObject>
-(void)btnClikced;
@end
// InterFace
@interface CustomCell : UITableViewCell
@property(nonatomic,retain) id<CustomCellDelegate> delegate;
//实施
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
UIButton *btn=[UIButton buttonWithType:UIButtonTypeContactAdd];
[btn addTarget:self action:@selector(btnTapped) forControlEvents:UIControlEventTouchUpInside];
self.accessoryView=btn;
}
return self;
}
-(void)btnTapped{
[self.delegate btnClikced];
}
在ViewController中
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.delegate = self;
return cell;
}
- (void)btnClikced{
//button action code here
}