0

我有这个代码:

UIBarButtonItem *donebutton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneButtonPressed:)];
    self.navigationItem.rightBarButtonItem = donebutton;

现在我想将一些参数传递给该方法:

- (void)doneButtonPressed{}

怎么做 ?

4

4 回答 4

5

如果您想传递对象说字符串,请为此使用setAssociatedObject :

首先添加

#import <objc/runtime.h>

现在

NSString *strText = @"text";

 objc_setAssociatedObject(donebutton, "Argument", strText, OBJC_ASSOCIATION_RETAIN_NONATOMIC); // provide button , key , object for passing

并像这样检索你想要你的论点的地方:

NSString *str = objc_getAssociatedObject(donebutton, "Argument"); //using button and key
//remove object associated for button if not needed.

但是如果你想要按钮参考然后

- (void)doneButtonPressed:(id)sender{
  UIButton *btnClicked = (UIButton *)sender;
  .......
}
于 2012-09-26T09:47:57.910 回答
2

你不能直接做。您应该将参数存储在类中其他位置的对象中,然后在点击按钮时检索它。

例如,如果你想传递一个 NSString,在你的 .h 中添加一个:

@interface myClass {

    NSString *param;
}

在你的 .m 中:

- (void)doneButtonPressed {

    // Do something with param
}
于 2012-09-26T09:52:25.357 回答
1

正如您所说的选择器,例如:

@selector(doneButtonPressed:)

它会崩溃,因为您的方法如下所示:

- (void)doneButtonPressed{}

但应该是:

- (void)doneButtonPressed:(id)sender{}

例如,您可以通过发件人标签传递您的数据...

于 2012-09-26T09:49:59.727 回答
0

在UIBarButtonItem的情况下可以使用的一个小技巧是使用possibleTitles属性,它实际上是NSSet < NSSString * >的一种类型,这意味着您可以将 NSString 存储在其中以便以后检索它。

这是如何完成的:

UIBarButtonItem * rightButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStylePlain target:self action:@selector(presentNextSegue:) ];
rightButtonItem.possibleTitles = [NSSet setWithObject:@"SegueName"];
self.navigationItem.rightBarButtonItem = rightButtonItem;

-(void)presentNextSegue:(UIBarButtonItem*)sender {
   NSLog(@"%@",sender.possibleTitles.allObjects.firstObject);
}

注意:possibleTitles属性的实际使用在此处解释。这只是一个小技巧:)

于 2016-09-01T10:11:07.953 回答