UIButton - 设置属性并在按下按钮时使用它

时间:2014-10-20 17:32:40

标签: ios objective-c uibutton

我有一个名为Cell Button的UIButton,它位于我的.h文件中

@interface CellButton : UIButton

@property (nonatomic,retain) CellButton *property;

在这个单元格中,我有两个相同类的按钮,然后我想设置btn1.property = 0;btn2.property = 1;我在index的单元格中设置它。

然后我按下按钮时调用它:

[cell.Btn1 addTarget:self action:@selector(BtnClicked:) forControlEvents:UIControlEventTouchUpInside];
 [cell.Btn2 addTarget:self action:@selector(BtnClicked:) forControlEvents:UIControlEventTouchUpInside];

以下是方法:

-(void)BtnClicked:(UIButton*)sender{
    DiningHallTableViewController *dtvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DiningHallTableViewController"];
[self.navigationController pushViewController:dtvc animated:YES];

    //depending on what button is tapped I want to send the number of the button pressed
}

如何发送号码?

修改

enter image description here

这是在我的cellForRowAtIndexPath

在我的方法BtnClicked中我有

 NSIndexPath *myIP = [NSIndexPath indexPathForRow:sender.tag inSection:0];

TwoMealsTableViewCell *cell = (TwoMealsTableViewCell*)[self.tableView cellForRowAtIndexPath:myIP];

2 个答案:

答案 0 :(得分:1)

-(void)tableView:(UITableView *)table cellForRowAtIndexPath(IndexPath *):indexPath
{
      // Assuming one section, if not then just take section number into account when getting cell
      // You should be doing this part already
      cell = self.contentArray[indexPath.row];
      // Set tags on the buttons
      cell.btn1 = [[CellButton alloc] init];
      cell.btn2 = [[CellButton alloc] init];
      cell.btn1.property = 0;
      cell.btn2.property = 1;

      [cell.btn1 addTarget:self action:@selector(BtnClicked:)forControlEvents:UIControlEventTouchUpInside];
      [cell.btn2 addTarget:self action:@selector(BtnClicked:) forControlEvents:UIControlEventTouchUpInside];

      // do anything else you need to do with the cells

      return cell
}

-(void)BtnClicked:(UIButton *)sender{
    DiningHallTableViewController *dtvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DiningHallTableViewController"];
[self.navigationController pushViewController:dtvc animated:YES];

    //depending on what button is tapped I want to send the number of the button pressed
    if ([sender isKindOfClass[CellButton class]]) {
        property = ((CellButton *)sender).property;
    }

    // Now do whatever you need to do with the number
}

我还应该补充一点,你应该通过故事板segue进行导航,假设你正在为iOS 5+开发,而不是创建一个新的VC并将其推入堆栈。有很多关于使用storyboard segues的教程such as this one

第三次编辑

从截图中可以清楚地看到您的问题出现在代码中:

@interface CellButton : UIButton

@property (nonatomic,retain) CellButton *property;

当您确实希望它是一个整数时,您将属性类型设置为CellButton。将上面的行更改为

@interface CellButton : UIButton

@property (nonatomic) NSInteger property;

您进行导航的方式与当前的最佳做法不符。虽然如果你不使用故事板(我不明白为什么你不会),我想你的解决方案是有效的。

答案 1 :(得分:0)

您获得该特定错误的原因是这一行:

@property (nonatomic,retain) CellButton *property;

您已将property声明为CellButton类型(CellButton类内部,这是自我引用的,如果有效,我会感到惊讶)。

当您在property中设置cellForRowAtIndexPath时,您将其设置为原始类型0的{​​{1}}或1,而不是类型int CellButton - 因此错误。

要解决错误,请按照rfj001说&更改你的@property声明。

@property (nonatomic, retain) NSInteger property;

另外,请考虑使用ARC。没有必要弄乱/保留计数&手动记忆mgt了。