Получение ссылки на элемент UI без IBOutlet

Если в программе используется UITableView с нестандартными ячейками, то необходимо создавать отдельный класс для описания экземпляра такой ячейки, прописывать аутлеты (@IBOutlet) и использовать этот класс для прототипа ячейки в Interface Builder. Однако если ячейка не сильно сложна, то есть более элегантное решение для задачи получения ссылки на объекты в ячейке. Мы можем найти элемент из Storyboard в коде при помощи метода viewWithTag

Рассмотрим пример:

У нас есть таблица с пятью строками и прототипом ячейки в которой есть элемент Label. Наша задача в каждую из строк в Label занести определенный текст. Для использования этого элемента Label нам нужна ссылка на него, которая и хранится в аутлете. Но мы не создавали класса для ячейки. Где же прописать аутлет?

А он нам и не нужен. Будем использовать тэги view элементов. Тег — это численный  идентификатор, который можно присвоить любому элементу пользовательского интерфейса, чтобы потом его отыскать.  Откройте  Storyboard, найдите прототип ячейки, на нем выберете Label и откройте вкладку Attributes Inspector.  В поле Tag введите 1111. 

Теперь для получения ссылки на этот Label можно использовать метод viewWithTag.

//
// proSwift.ru
//

let label = cell.viewWithTag(1111) as! UILabel

Получив ссылку на Label, мы можем передать ему нужный нам текст.

//
// proSwift.ru
//

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath:NSIndexPath) -> UITableViewCell { 
  let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)  
  let label = cell.viewWithTag(1111) as! UILabel  
  if indexPath.row == 0 {     
     label.text = "Text for row 1"   
  } else if indexPath.row == 1 {
     label.text = "Text for row 2"   
  } else if indexPath.row == 2 {
     label.text = "Text for row 3"  
   } else if indexPath.row == 3 {
     label.text = "Text for row 4"
   } else if indexPath.row == 4 {
     label.text = "Text for row 5"
   }  
  return cell 
}

Таким образом, использование тэгов позволяет получить ссылку на элементы UI без  создания и использования аутлета  @IBOutlet.

Добавить комментарий

Ваш адрес email не будет опубликован.

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.