it-swarm.com.ru

Подключите розетку Cell Prototype в раскадровку

Я новичок в раскадровке, и поэтому у меня есть некоторые трудности ...

Я создал TableViewController, и я хотел бы настроить прототип ячейки. В прототип ячейки я добавил несколько меток, которые я хотел бы настроить с помощью своего собственного класса, который наследуется от UITableViewCell (AreaListCell). В раскадровке для прототипа ячейки я настроил пользовательский класс с «AreaListCell», а его стиль - «Пользовательский».

В раскадровке, когда я выбираю Прототип ячейки, а затем помощника, помощник отображает мой класс, который реализует UITableViewController (AreasTableViewController), а не
мой класс "AreaListCell".

В результате я могу создать розетку (используя Ctrl + Drag из метки прототипа ячейки) для класса AreasTableViewController, но не для класса AreaListCell! Есть идеи, как соединить прототип ячейки с моим классом AreaListCell?

Спасибо за вашу помощь! 

36
sebastien

ОБНОВЛЕНИЕ: Начиная с Xcode 4.6 (возможно, раньше), теперь вы можете создавать розетки, перетаскивая их мышью! - Это должно быть сделано в разделе интерфейса или расширении класса (расширение класса не существует по умолчанию для новых подклассов ячейки. Спасибо Стиву Хейли за указание на это.

Вы не можете автоматически подключить и создать розетку, перетащив ее в блок кода в редакторе помощника, что плохо, но вы можете создать розетки вручную и затем подключить их. 

В интерфейсе подкласса вашей ячейки:

@interface CustomCell : UITableViewCell

@property (nonatomic) IBOutlet UILabel* customLabel;

@end

Синтезировать как обычно в реализации. 

В раскадровке выберите ячейку и перейдите к инспектору соединений, вы увидите новую розетку. Перетащите оттуда к соответствующему элементу в вашем прототипе: 

enter image description here

Теперь к нему можно обращаться как cell.customLabel в вашем методе cellForRowAtIndexPath:.

128
jrturton

Да, вы не можете соединить представления, которые находятся внутри пользовательской ячейки прототипа, используя метод ctrl + drag. Вместо этого используйте свойство tag представления, а затем, когда вы строите ячейку, вытащите метки, используя их теги.

Вот:

//Let's assume you have 3 labels.  One for a name, One for a count, One for a detail
//In your storyboard give the name label tag=1, count tag=2, and detail tag=3


- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableViewCell *theCell = [tableView dequeueReusableCellWithIdentifier:@"Prototype Cell"];

    UILabel *nameLabel = (UILabel *)[theCell viewWithTag:1];
    UILabel *countLabel = (UILabel *)[theCell viewWithTag:2];
    UILabel *detailLabel = (UILabel *)[theCell viewWithTag:3];

    nameLabel.text = @"name";
    countLabel.text = @"count";
    detailLabel.text = @"details";

    return theCell;
}

Вы также можете установить метки как свойства в своем пользовательском коде ячейки, а затем, когда ячейка инициализируется, использовать вызов viewWithTag, чтобы назначить свойства меток меткам, которые вы создали на своих раскадровках.

Мне потребовалось несколько дней, чтобы понять, что я не могу ctrl + перетащить из пользовательской ячейки для создания IBOutlet.

Удачи!

Правка: Вы можете создавать IBOutlets для своих меток внутри пользовательской ячейки и создавать ссылки программно, но не с помощью метода ctrl + drag.

Правка 2: Я был совершенно не прав, вы можете Ctrl + перетащить. Смотрите второй ответ на этот вопрос. Это сложно, но работает довольно хорошо.

21
Justin Paulson

Swift 3

// мы используем это, если ваши изображения на сервере.

// мы получаем изображения из URL.

// вы можете установить изображение из вашего Xcode.

  1. URL изображений находится в массиве name = thumbnail, т.е. self.thumbnail [indexPath.row] 
  2. на UITableviewCell положить imageView на ячейку
  3. выберите UIimageView назначить ему тег из раскадровки.

    let pictureURL = URL(string: self.thumbnail[indexPath.row])!
    let pictureData = NSData(contentsOf: pictureURL as URL)
    let catPicture = UIImage(data: pictureData as! Data)
    var imageV = UIImageView()
    imageV = cell?.viewWithTag(1) as! UIImageView
    imageV.image = catPicture
    
0
Ameer Chand