【问题标题】:How use delegate for button in cell table?如何在单元格表中使用委托作为按钮?
【发布时间】:2016-03-02 16:47:27
【问题描述】:

我有一个标准方法,在表格中形成单元格:

- (SearchTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.button.tag = 3;
}

单元格内有带有动作的按钮:

- (IBAction)changeName:(id)sender {
    // GOTO
}

点击后如何更改按钮的名称

【问题讨论】:

  • UIButton *button = (UIButton *)sender; if (button.tag == 3){//set button title}?
  • @Larme,这可能就是全部答案。你愿意回答吗? :)

标签: ios objective-c


【解决方案1】:

试试看:

- (IBAction)changeName:(id)sender {
    UIButton *button = (UIButton *)sender;

    if (button.tag == 3) {
        [button setTitle:@"Your title" forState:UIControlStateNormal];
    }
}

不要忘记将您的方法链接到笔尖中的按钮。

【讨论】:

  • 我没有区别标签
  • 亲爱的@Pipiks,请注意按钮位于表格视图单元格上。因此按钮操作将仅使用协议委托方式或将目标添加到 CellForRowAtIndexPath 中的按钮来处理。
  • 你为什么不直接使用–(IBAction)changeName:(UIButton *)sender {...}...?
【解决方案2】:

使用协议委托方法
自定义单元格.h文件的代码

#import <UIKit/UIKit.h>
@protocol CustomCellProtocal <NSObject>
 -(void)CellButtonClicked:(UIButton *)sender;
@end

@interface CustomCell : UITableViewCell
   @property(weak) id<CustomCellProtocal>delegate;
   - (IBAction)BtnClicked:(id)sender;
@end


自定义单元格 .m 文件的代码

#import "CustomCell.h"

@implementation CustomCell
@synthesize delegate;
  - (IBAction)BtnClicked:(id)sender {
      [delegate CellButtonClicked:sender];
   }
@end


另一种最简单的方法
我建议您创建具有 Button 的自定义单元格。在自定义单元格类中为该按钮创建插座。

然后在 cellForRowAtIndexpath() 中将目标添加到该按钮,如 follow

[CustomCell.buttonOutlet addTarget:self action:@selector(BtnClicked:) forControlEvents:UIControlEventTouchUpInside];


然后在 BtnClicked 方法中处理您的逻辑。

-(void)BtnClicked:(UIButton *)sender{
     if(sender.tag == 1){
        [sender setTitle:@"Hello" forState:UIControlStateNormal];
 }
}


我强烈建议,第二种方式最适合您的情况。并且单元格将带有标识符。所以不用担心。

【讨论】:

  • 这太可怕了,这不仅根本不回答问题,也不符合代码约定。此外,这会在每次调用 tableView:cellForRowAtIndexpath: 时添加一个新目标,因此该按钮可能会多次触发操作。
  • 实际上单元格是 dequeReusableCellWithIdentifier.... 其次,通过为 indexPath.row 的每个按钮设置标签,我们可以识别记录的每个按钮并在相同的 TargetAction 方法中执行登录
猜你喜欢
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多