اي فون - الوصول uitableviewcontroller من uitableviewcell
-
06-07-2019 - |
سؤال
ولدي هيكل مثل هذا ....
UITableViewController -> UITableViewCell -> UIView
وأنا في حاجة إلى UIView
الوصول إلى جدول هاش (NSMutableDictionary
) في UITableViewController
هل هناك طريقة للوصول إلى ViewController ببساطة من ViewCell (باستخدام [superview ViewCell] من الواضح لا تعمل) .... هل أنا بحاجة للذهاب إلى أسفل من خلال AppDelegate باستخدام [[UIApplication sharedApplication] delegate]
؟
وشكرا!
المحلول
وأنا عادة الحفاظ على إشارة ضعيفة من وجهة نظري UIView إلى بلدي UIViewController إذا كنت في حاجة واحدة، وعادة من خلال خلق طريقة شيئا من هذا القبيل:
-(MyView*)initWithController:(CardCreatorViewController*) aController andFrame:(CGRect)aFrame
{
if (self = [super initWithFrame:aFrame])
{
controller = aController;
// more initialisation here
}
return self;
}
ويمكنك أيضا استخدام نمط مندوب إذا كنت ترغب في حل أكثر المنفصل. أنا أميل للاعتقاد بأن ثمة مبالغة لعرض وحدة تحكم، ولكن أود أن استخدامه مع نظام التحكم وsubcontrollers.
نصائح أخرى
وهذا ينبغي أن تفعل خدعة:
UITableView *tv = (UITableView *) self.superview.superview;
UITableViewController *vc = (UITableViewController *) tv.dataSource;
ويمكنك إنشاء فئة لهذا:
@implementation UITableViewCell (FindTableViewController)
- (id<UITableViewDataSource>)tableViewController
{
UIView *view = self;
while (!(view == nil || [view isKindOfClass:[UITableView class]])) {
view = view.superview;
}
return ((UITableView *)view).dataSource;
}
@end
وبعد ذلك يمكنك ببساطة الوصول self.tableViewController
من الخلية نفسها (على افتراض انك وشملت هذه الفئة). قد تحتاج إلى يطرح للثو صفك الجدول تحكم العرض.
ومنذ UITableViewCell في مكان ما في التسلسل الهرمي الرأي، يمكنك الوصول إلى رأي الجذر الخاص بك عن طريق استرجاع view.superview حتى تحصل عليه. إذا كنت لا ترغب في إضافة أي خصائص لجهة نظرك، يمكنك الوصول إلى وحدة التحكم من خلال خاصية nextResponder
في طريقة العرض. سيكون لديك ليلقي عليه إلى ما الدرجة التي تحتاج إليها، وبطبيعة الحال، وأنه قد لا يكون أنظف استخدام العقار. انها الإختراق سريع ن القذرة للوصول الى ذلك.
إذا كنت تبحث عن شيء يمكنك إظهار أطفالك على الرغم من أنني كنت تهدف للذهاب من خلال مندوب التطبيق الخاص بك، أو إذا حدث تحكم وجهة نظركم أن يكون المفرد، فقط تنفيذ نمط تصميم المفرد والوصول إليه من خلال هذا .
وبعض التعديل من كاري Morstol الجواب:
والتسلسل الهرمي من tableviewcell في دائرة الرقابة الداخلية 5.0 (بلدي نسخة تجريبية)
cell.superview = tableview
cell.superview.superview = UIViewControllerWrapperView
وهكذا، استخدم cell.superview للحصول على tableview. وtableview وtableviewController له علاقة مندوب، مصدر البيانات في الافتراضي.
يمكنك الحصول على tableviewController بإشارة tableview.delegate
أو tableview.dataSource
.
UITableView *tableView = cell.superview;
UITableViewController *tableViewController = tableView.delegate; // or tableView.dataSource`