2015-11-10 4 views
1

Я раньше не использовал раскадровку.раскадровка для проектирования UITableViewCell

Я хочу создать пользовательскую ячейку представления таблицы и хочу сделать это с помощью построителя интерфейса.

Я создал раскадровку и поместил viewController (пользовательского класса) и разместил под ним пользовательскую ячейку.

Я также подключил розетки для этикеток.

Однако, когда я пытаюсь получить доступ к ярлыку, он всегда равен нулю.

Я использую следующий код для создания кода, и я подозреваю, что именно там я терпит неудачу.

Я чувствую, что должен как-то сказать, что я хочу, чтобы диспетчер представлений был из раскадровки, не так ли?

ThreadTempDatasViewController* threadTempDatasViewController = [[ThreadTempDatasViewController alloc] init]; 
[self.navigationController pushViewController: threadTempDatasViewController animated: NO]; 

** EDIT **

теперь у меня

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"ThreadTempData" bundle:nil]; 
ThreadTempDatasViewController *threadTempDatasViewController = [storyboard instantiateViewControllerWithIdentifier:@"ThreadTempDatasViewController"]; 

[self.navigationController pushViewController: threadTempDatasViewController animated: NO]; 

и я получаю ошибку

раскадровке() не содержит вид контроллер с идентификатором ' ThreadTempDatasViewController '

Итак, как сообщить раскадровке, что у него есть этот диспетчер представлений, кроме помещения диспетчера представлений в раскадровку в интерфейсе?

** EDIT 2 **

ответ> Вы должны установить раскадровки ID для ViewController в InterfaceBuilder.

Теперь я туда, где я был, метка ячейки равна нулю ..

** EDIT 3 **

ответ> так что вы не должны иметь self.tableView.registerClass(ThreadTempDataTableViewCell.self, forCellReuseIdentifier: "ThreadTempDataTableViewCell") при использовании InterfaceBuilder.

Я установил ThreadTempDataTableViewCell для поля класса ячейки таблицы в IB и использовал его как следующее.

let cellIdentifier = "ThreadTempDataTableViewCell" 
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! ThreadTempDataTableViewCell 
+1

Вы активировали свой контроллер вида в раскадровке (щелкните его) и установили в правой панели идентификационного удостоверения идентификатор раскадровки? –

ответ

0

Я вижу пару вопросов. Итак, я дам вам пошаговую инструкцию. Я понял, что вы хотите иметь View Controller, который будет иметь представление Table и внутри этого Table View, вы хотите иметь собственную CellView TableView.

Таким образом, кроме попытки создать экземпляр ViewController неправильно, я чувствую, что есть еще одна вещь. Вам нужно иметь TableView для хранения вашей TableView Cell.

Итак, вот шаги, которые необходимо учитывать:

Шаг 1: Перетащите View Controller в раскадровку. В моем случае имя моей раскадровки - «Главное».

Так, только головы на том, как загрузить с помощью раскадровки ViewController identifier-

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
ThreadTempDatasViewController *threadTempDatasViewController = [storyboard instantiateViewControllerWithIdentifier:@"ThreadTempDatasViewController"]; 

[self.navigationController pushViewController: threadTempDatasViewController animated: NO]; 

Итак, вернемся к добавлению объекта к вашему View контроллер- Теперь перетащить UITableView в вид вашего UIViewController. Затем перетащите UITableViewCell внутри вашего TableView.

Теперь выберите TableViewCell, чтобы развернуть и перетащить UILabel внутри содержимого содержимого TableViewCell.

Взгляд Иерархия будет выглядеть как this-

enter image description here

Итак, у вас есть все объекты, на месте сейчас.

Шаг 2: Дайте View Controller идентификатор, «ThreadTempDatasViewController» и назначить его класс (ThreadTempDatasViewController) от инспектора идентичности в раскадровку.

enter image description here

Шаг 3: Выберите TableViewCell и установить его ReuseIdentifier что «ThreadTempDataTableViewCell» в вашем случае таким образом, вы не должны зарегистрировать ячейку идентифицированный программно.

enter image description here

Также не забудьте назначить свой собственный класс, который в вашем случае является "ThreadTempDataTableViewCell"

enter image description here

Шаг 4: Выберите пользовательские TableViewCell и соединить выходы с желаемыми объектами пользовательского интерфейса. Итак, подключите Outlet вашего UILabel, который должен быть объявлен внутри вашего класса ThreadTempDataTableViewCell.h с меткой в ​​раскадровке внутри вашей ячейки.

Например, если ThreadTempDataTableViewCell.h иметь на выходе из UILabel называется «threadTempDataLAbel», то это будет что-то как-

@interface ThreadTempDataTableViewCell : UITableViewCell 

@property(nonatomic, strong) IBOutlet UILabel *threadTempDataLAbel; 

@end 

Теперь выберите ThreadTempDataTableViewCell в раскадровку, а затем перейти к последнему иконку ваш личный инспектор, и подключитесь к вашей розетке.

enter image description here

После подключения, вы увидите что-то как-

enter image description here

Ради ясности, вы должны также иметь IBOutlet вашего TableView в вашем ViewController.

#import <UIKit/UIKit.h> 

@interface ThreadTempDatasViewController : UIViewController<UITableViewDelegate, UITableViewDataSource> 

@property(nonatomic, strong) IBOutlet UITableView *myTableView; 

@end 

Теперь выберите ViewController в раскадровке и до перейти на последнюю вкладку, как и соединить с выходом в Tableview в.

enter image description here

Ну, это должно быть все настройки вам нужно. Теперь вы можете перейти в свой код, чтобы заполнить таблицу или получить доступ к свойству TableViewCell (threadTempDataLabel)

Я думаю, причина, по которой вы не можете получить доступ к своей UILabel, либо из-за того, что вы пытались установить TableViewCell внутри вашего ViewController а не TableView или если у вас есть TableView, возможно, вы забыли установить источник данных для контроллера представления. Вот полный код.

#import "ThreadTempDatasViewController.h" 
#import "ThreadTempDataTableViewCell.h" 

@interface ThreadTempDatasViewController() 

@end 

@implementation ThreadTempDatasViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.myTableView.dataSource=self; 
    self.myTableView.delegate=self; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 


#pragma mark- TableView Datasource 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return 5; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    ThreadTempDataTableViewCell *cell= [tableView dequeueReusableCellWithIdentifier:@"ThreadTempDataTableViewCell"]; 
    cell.threadTempDataLAbel.text = @"test"; 
    return cell; 
} 
@end 

Надеюсь, это поможет.

+0

Отлично! это будет полный учебник, если вы добавите мои 2 изменения. 1 для того, как я программно загружаю viewcontroller, и 2 для не регистрирования класса. – eugene

+0

Спасибо, я добавил редактирование того, как загрузить контроллер просмотра с помощью раскадровки. О регистрации класса ячейки вам не придется делать этого, если вы укажете свойство идентификатора Cell в своем раскадровке. – Natasha

1

Если вы хотите использовать для instantiateViewControllerWithIdentifier:, убедитесь, что вы установили правильный идентификатор в Interface Builder. Вы можете найти его в инспекторе Identity ViewController в Interface Builder.

Я предполагаю, что вы объявили ярлык в классе своей ячейки и попытаетесь получить к нему доступ. Если вы это сделали, убедитесь, что вы установили класс ячейки в свой класс и правильно подключили выход к свойствам в Interface Builder.

+0

Спасибо .. Я просто сделал это на самом деле, я на следующем шаге. – eugene

+0

Можете ли вы добавить мое второе исправление, чтобы я мог принять. – eugene

+0

, пожалуйста, дайте мне знать код, как вы сначала получите ячейку и вашу конфигурацию IB ячейки. – MatthewLuiHK

Смежные вопросы