أريد تغيير وحدة تحكم الرأي عندما زر انها فون المضغوط

StackOverflow https://stackoverflow.com/questions/2452044

سؤال

ولدي تحكم عرض جدول مع خلايا مخصصة. في تلك الخلايا وأضفت زر لكل واحد من الخلايا. ما أود انها أنه عندما كنت اضغط على هذا الزر أن يعرض وجهة نظر جديدة مع مزيد من المعلومات حول تلك الخلية، مختلفة ترى أن أحصل من didSelectRowAtIndexPath.

وأنا أعلم أنه من الآن سؤال صعب. رأيت أن الزر له بعض الإجراءات على interfacebuilder (تهبط ربما)، ولكن كيف يمكنني ربطه ما التعليمات البرمجية. أين يجب أن يعلن التعليمات البرمجية التي مقبض هذا الحدث؟

ولقد نشرت في محافل أخرى مع أي جواب، نأمل أن يكون هذا من شأنه أن يعمل.

وشكرا. جيان

هل كانت مفيدة؟

المحلول

وأنا ربما فئة فرعية UIButton أن يكون لها مثيل NSIndexPath. وبهذه الطريقة، كل UIButton فرد في UITableViewCell يمكن أن "يعرف" حيث كان في طريقة عرض جدول، وذلك عند الضغط على زر، يمكنك استدعاء بعض الطرق التي تأخذ NSIndexPath ويدفع وجهة نظر جديدة، على غرار ما تفعله في -didSelectRowAtIndexPath: ولكن مع الرأي الآخر الخاص بك بدلا من ذلك (ربما تعطيه اسما المنهج الوصفي مثل -didPressButtonAtIndexPath:).

وبدلا من استخدام منشئ واجهة للقيام بذلك، يجب عليك إضافة وسيلة لUIButton فرعية نفسها وهذا بدوره يستدعي أسلوب على حدة تحكم وجهة نظركم. ثم، لكل UIButton، يمكنك استخدام -addTarget:action:forControlEvents: طريقة UIControl. لديك دعوة UIButton طرقها الخاصة، التي تدعو طريقة وحدة التحكم. الحل قد تبدو شيئا مثل:

// MyButton.h
@interface MyButton : UIButton {
    NSIndexPath *myIndexPath;
    MyViewController *viewController;
}

- (void)didPressButton;
@end

// MyViewController.h
@interface MyViewController { }
- (void)didPressButtonAtIndexPath:(NSIndexPath *)indexPath;
@end

وبعد ذلك، عند بناء خلايا الجسم، لكل زر إضافة المكالمة:

[button addTarget:button 
           action:@selector(didPressButton)
 forControlEvents:UIControlEventTouchDown];

وأخيرا، تنفيذ -didPressButton لتبدو وكأنها:

- (void)didPressButton {
   [controller didPressButtonAtIndexPath:myIndexPath];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top