문제

Uitoolbarbutton이 외분진 방법을 사용하여 대상에 객체를 전달할 수 있습니까 (일반 버튼 사용을 사용하여 불가능한 것 같습니다)?

나는 같은 것을 의미한다

UIBarButtonItem *Button = [[UIBarButtonItem alloc] initWithImage:buttonImage
  style:UIBarButtonItemStylePlain target:self action:@selector(doSomething:) **withObject:usingThis**];

나는 객체와 함께 전체 메소드를 시작하는 방법을 트리거 할 수 있다는 것을 알고 있지만 우아함을 위해 코드를 최소화하려고 노력했다. 초월적인 대답과 함께 올 수 있습니다 ... 누가 ...

도움이 되었습니까?

해결책

Uibarbuttonitem 클래스를 확장해야합니다.

다음은 rcbarbuttonitem 클래스를 만드는 예입니다. 나는 InitwithTitle을 쉽게 사용했는데, 당신이 그것을 바꿀 수 있다고 확신합니다 ...

Uibarbuttonitem 서브 클래스

#import <UIKit/UIKit.h>

@interface RCBarButtonItem : UIBarButtonItem {
    id anObject;
}

@property (nonatomic, retain) id anObject;

- (id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action withObject:(id)obj;

@end

@implementation RCBarButtonItem

@synthesize anObject;

-(void)dealloc {
    [anObject release];
    [super dealloc];
}

- (id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action withObject:(id)obj {
    if (self = [super initWithTitle:title style:style target:target action:action]) {
        self.anObject = obj;
    }
    return self;
}

@end

그런 다음 이것은 그렇게 구현 될 수 있습니다.

#import "RootViewController.h"
#import "RCBarButtonItem.h"

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    RCBarButtonItem *button = [[RCBarButtonItem alloc] initWithTitle:@"Hello"
                                                               style:UIBarButtonItemStylePlain 
                                                              target:self
                                                              action:@selector(doSomething:)
                                                          withObject:@"Bye"];
    self.navigationItem.rightBarButtonItem = button;

}

- (void)doSomething:(id)sender {
    NSLog(@"%@", [(RCBarButtonItem *)sender anObject]);
}

다른 팁

이 상황에서 내가 한 일은 다음과 같이 불리는 nsdictionary 속성을 만드는 것입니다. buttonArguments:

self. buttonArguments = [[NSDictionary alloc] initWithObjectsAndKeys: usingThis, Button, ... , nil];

그럼 당신의 doSomething: 방법, 객체를 기준으로 찾아보십시오 sender 매개 변수.

카테고리를 사용하는 것을 선호합니다.

Uibarbuttonitem+Barbuttonitem.h

@interface UIBarButtonItem (BarButtonItem)
@property (strong, nonatomic) NSDictionary *userInfo;
@end

Uibarbuttonitem+Barbuttonitem.M

static void *kUserInfo = &kUserInfo;

@implementation UIBarButtonItem (BarButtonItem)

- (NSDictionary *)userInfo {
    return objc_getAssociatedObject(self, kUserInfo);
}

- (void)setUserInfo:(NSDictionary *)userInfo {
    objc_setAssociatedObject(self, kUserInfo, userInfo, 
        OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top