سؤال

أقوم حاليًا بتطوير تطبيق iPhone بسيط باستخدام UITabBar وطرق عرض الجدول لعرض البيانات.يحتوي شريط التبويب على 8 أقسام، يحتوي كل منها على نفس طريقة العرض ولكن باستخدام مصدر بيانات مختلف، فإن عنوان طريقة عرض الجدول مختلف أيضًا، ولكن بصرف النظر عن ذلك فإن طرق العرض هي نفسها.

أرغب في استخدام نفس وحدة التحكم في العرض لكل طريقة عرض، مع خيارات لتعيين مصدر البيانات وعنوان الجدول، بدلاً من كتابة 8 وحدات تحكم عرض منفصلة مع الحد الأدنى من الاختلافات.هل سيكون ذلك ممكنا، والأهم من ذلك، كيف سيكون ذلك ممكنا؟

تحديث
لقد نجحت إلى حد ما، باستخدام الكود الذي نشره أولي بيجمان.ومع ذلك، أدركت أن سؤالي الأولي خلط بين بعض المصطلحات.UITableViewDataSource هو بروتوكول رسمي ويفعل الكثير مما أحاول تحقيقه.أحتاج فقط إلى المنطق لإعداد الجداول مرة واحدة، والبيانات اللازمة لملء عرض الجدول هي الشيء الوحيد المختلف.ما قصدته بـ "مصدر البيانات" كان مجرد قاموس للكائنات التي يمكن استخدامها بواسطة وظائف UITableView الخاصة بوحدة التحكم في العرض الخاصة بي.

NSDictionary *row1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"Id", 
                    @"The Name", @"Name", 
                    @"Post", @"Type",
                    @"09-09-2009", @"Meta",
                    @"This is the excerpt, @"Excerpt",
                    @"This is the body text", @"Body",
                    @"icon.jpg", @"Icon", 
                    @"image.jpg", @"Image", nil];

NSArray *array = [[NSArray alloc] initWithObjects:row1, nil];

كيف يمكنني تمرير هذا القاموس من المفوض إلى UITableViewController؟

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

المحلول

مثل يقول دانيال, ، يمكنك إنشاء أي عدد تريده من مثيلات وحدة تحكم العرض نفسها ثم تعيين هذه المثيلات لعلامات التبويب الخاصة بوحدة تحكم شريط علامات التبويب.

يمكن أن يبدو الكود بهذا الشكل (أقوم بإنشاء 3 حالات فقط هنا):

// Create an array of dictionaries that holds the configuration for the table view controllers.
// Assuming tableXDatasource are existing objects that conform to the UITableViewDataSource protocol.
NSArray *tableControllersConfig = [NSArray arrayWithObjects:
    [NSDictionary dictionaryWithObjectsAndKeys:table1Datasource, @"datasource", @"Table 1", @"title", nil],
    [NSDictionary dictionaryWithObjectsAndKeys:table2Datasource, @"datasource", @"Table 2", @"title", nil],
    [NSDictionary dictionaryWithObjectsAndKeys:table3Datasource, @"datasource", @"Table 3", @"title", nil],
    nil];

// Create the table view controller instances and store them in an array
NSMutableArray *tableControllers = [NSMutableArray array];
for (NSDictionary *configDict in tableControllersConfig) {
    // Assuming MyTableViewController is our custom table view controller class
    MyTableViewController *controller = [[MyTableViewController alloc] initWithNibName:@"MyTableViewController" bundle:nil];
    controller.tableView.delegate = controller;
    controller.tableView.dataSource = [configDict valueForKey:@"datasource"];
    controller.title = [configDict valueForKey:@"title"];
    [tableControllers addObject:controller];
    [controller release];
}

// Assign the array of table view controllers to the tab bar controller
self.tabBarController.viewControllers = [NSArray arrayWithArray:tableControllers];

نصائح أخرى

من المؤكد أنه ممكن، حيث يمكنك إنشاء مثيل لوحدة التحكم في العرض عدة مرات كما تريد باستخدام مصادر بيانات مختلفة... ستتبع نفس الإجراء الذي ستتبعه كما لو كان لديك وحدات تحكم عرض مختلفة لكل علامة تبويب...

يمكنك استخدام UIToolBar مع أي أزرار تريدها واستدعاء reloadData عند كل نقرة زر مع معلمات مختلفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top