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にNSStringを追加します。

@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の場合に使用できるちょっとしたハックは、実際にはNSSet <NSSString *>のタイプであるpossibleTitlesプロパティを使用することです。これは、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 に答える