2012-06-23 19 views
6

sınıfına bağlanmayacaktır Veri kaynağını ve tablo görünümünün çıkışlarını storyboard içindeki özel temsilci sınıfım için temsil edemiyorum. Bu tablo işlevlerini başka bir sınıfa devretmek istiyorum. Heyet, çıkışlar ve bir hikaye panosundaki şeyleri kablolamak konusunda temel olarak yanlış anladığım bir şey var.UITableView veri kaynağı ve temsilci özel bir sınıf

Arka plan bir bir UIPickerView ihtiva eden bir görünümü vardır UIViewController ve diğer şeyler arasında, bir UITableView sahiptir.
UIViewController numaramın çok büyük olduğu noktaya ulaştım ve tabloyla ilgili işlevleri başka bir sınıfa taşımak istiyorum.

numberOfSectionsInTableView: gibi tablo yöntemlerini içermek için aşağıdaki sınıfı oluşturdum.

@interface ExerciseTableDelegate : NSObject <UITableViewDelegate, UITableViewDataSource> 

@property (strong, nonatomic) ExerciseDataController *dataController; 

@end 

ben yukarıdaki sınıfa bir başvuru koymak düşündüm benim UIViewController

@interface ExerciseViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> 
{ 
    UIPickerView *exercisePicker; 
} 

@property (strong, nonatomic) IBOutlet ExerciseTableDelegate *tableDelegate; 

@end 

Umuyordum ki film şeridinde içinde, benim tablonun veri kaynağı veya temsilci çıkışları biri sürüklerken UITableViewController'a bakınca bana yetki verilen sınıfa bağlanabilme şansı verirdi. Olmadı.

Daha sonra, storyboard içinde ExerciseTableDelegate sınıfına bir nesne oluşturmaya çalıştım. Sonra tablo görünümü temsilcisini nesneye sürükleyebilirim, ancak bu benim AppDelegate içinde kurduğum aynı nesne değil.

Uygulamam temsilci

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
    ExerciseViewController *rootViewController = (ExerciseViewController *)[[navigationController viewControllers] objectAtIndex:0]; 

    ExerciseTableDelegate *tableDelegate = [[ExerciseTableDelegate alloc]init]; 
    ExerciseDataController *dataController = [[ExerciseDataController alloc] init]; 

    tableDelegate.dataController = dataController; 
    rootViewController.tableDelegate = tableDelegate; 

    // Override point for customization after application launch. 
    return YES; 
} 
  • benim nesne a tek yapmak ve hala temsilci onu başlatılması gerekiyor mu?
  • Bu kurulumu Storyboard'da değil kodda mı yapmalıyım?
  • Storyboard'da bir nesne oluşturmak yanlış fikir mi?

Kendimi yakın hissediyorum ama bence çok fazla yapıyorum.

cevap

1

Uygulama temsilcisinizde ayarladığınız ExerciseTableDelegate örneğine erişmek istiyorsanız, o zaman bunu sizin tablo görünümünüze kod biçiminde bağlamanız gerekir; ve bulunan, storyboard'a yeni bir nesne ekleyerek yeni bir örnek oluşturur.

Neyse ki, bunun uygulanması oldukça basit.

self.tableView.delegate = self.tableDelegate; 
self.tableView.datasource = self.tableDelegate; 

Bu olacak yeniden noktası veri kaynağı ve ayrı bir nesne için temsilci: tablo görünümü kontrolörün viewDidLoad yöntemde, aşağıdakileri ekleyin.

+0

Thankyou (@jrturton). Bu hile yaptı. Buna ek olarak, ExerciseViewControllers tableView için bir IBOutlet oluşturmak için standart bir şey yapmam gerekiyordu ve bunu storyboard'da bağlamak gerekiyordu. – AllTheThingsICanDo

İlgili konular