iOS - passing arguments in action:@selector()

后端 未结 3 1516
臣服心动
臣服心动 2020-12-18 11:12

I\'m adding a button to a UITableViewCell programmatically. The method to be run when the button is pressed is - (void) quantityDown:(id)sender rowNumber:(int)rowNum<

相关标签:
3条回答
  • 2020-12-18 12:06

    Why don't you make a Custom UIButton class and have the object as property?

    See below.

    "MyButton.h"

    @interface MyButton : UIButton
    @property(nonatomic, strong)MyClass *obj;
    @end
    

    "MyButton.m"

    #import "MyButton.h"
    
    @implementation MyButton
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            // Initialization code
        }
        return self;
    }
    
    @end
    

    Now assign MyButton class to your actual button in the cell/ or initialize the custom button instead of normal UIButton class and assign the object directly.

    And in your IBAction where sender=MyButton

    - (void) quantityDown:(id)sender{
       MyButton *btn  = (MyButton *)sender;
       //You get the object directly
       btn.obj;
    }
    

    Doing it this way you can actually access as many properties you want easily. And its useful in other implementations too.

    Hope it helps.

    0 讨论(0)
  • 2020-12-18 12:06

    Set each button tag as indexPath.row. Then just declare the function:

    - (void)quantityDown:(id)sender
    

    In that method do this:

    UIButton *btn = (UIButton *)sender;
    

    Add target like this:

    [buttonDown addTarget:self action:@selector(quantityDown:) forControlEvents:UIControlEventTouchUpInside];
    

    From btn.tag you can get the row number. Hope this helps. :)

    0 讨论(0)
  • 2020-12-18 12:07

    Button can carry only one input so keep your sender and rowNum same so that it can be handled easily In cell for row method.

    UIButton *b = [UIButton buttonWithType:UIButtonTypeContactAdd];
    b.tag = indexPath.row;
    [b addTarget:self action:@selector(quantityDown:) forControlEvents:UIControlEventTouchUpInside];
    

    Your method

     - (void)quantityDown:(id)sender  
        {    
           NSLog(@"%d", sender.tag);  
        }
    

    hope this will help...

    0 讨论(0)
提交回复
热议问题