سؤال

ولدي هيكل مثل هذا ....

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`
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top