Получение ссылки на элемент 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.
Добавить комментарий