iPhone - تمرير كائن على عمل UITOOLBARBUTTON
-
18-09-2019 - |
سؤال
هل هذا ممكن لجعل UITOOLBARBUTTON اجتياز كائن هدفه باستخدام بعض الأسلوب الشديد (كما يبدو أنه لا يكون ممكنا باستخدام استخدام الزر العادي)؟
أعني شيئا مثل
UIBarButtonItem *Button = [[UIBarButtonItem alloc] initWithImage:buttonImage
style:UIBarButtonItemStylePlain target:self action:@selector(doSomething:) **withObject:usingThis**];
وأنا أعلم أنني أستطيع أن أشار إلى طريقة ستطلق الطريقة الكاملة مع الكائن، ولكن من أجل الأناقة كنت أحاول تقليل الكود ... أظن أنه غير ممكن، ولكن كما كنت فكرت هناك بجنون قد تأتي مع إجابة متعجلة ... من يعرف ...
المحلول
يجب عليك تمديد فئة Uibarbuttonitem.
هنا مثال إنشاء فئة RCBARBUTTONITEM. لقد استخدمت interwithtitle لسهولة، أنا متأكد من أنك تستطيع تغييرها ...
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