2015-07-19 2 views
-1

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

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

В примерах, на которые я смотрю, контроллер представления запускает три функции, все называемые «табличным представлением», и каждая функция делает что-то уникальное, такое как возвращение количества строк в секции или использование многоразовых ячеек.

Но я просто не вижу, когда и как вызывается эти функции.

Вызываются ли они, когда пользователь переходит к представлению? Если да, то как? И почему эти разные функции имеют одно и то же имя (т. Е. func tableView())?

Вот некоторые примеры кода:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return dwarves.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = tableView.dequeueReusableCellWithIdentifier(simpleTableIdentifier) 
       as? UITableViewCell 
     if (cell == nil) { 
      cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: simpleTableIdentifier) 
     } 


     cell!.textLabel.text = dwarves[indexPath.row] 
     cell!.textLabel.font = UIFont .boldSystemFontOfSize(15) 
      return cell! 
} 
+0

Не могли бы вы добавить ссылку на примеры, на которые вы смотрите? – gaborous

+0

У меня нет ссылки, извините. Примеры приведены в книге. –

+0

Я добавил несколько примеров кода для иллюстрации. –

ответ

2

Я просто не могу видеть, когда и как эти функции вызываются.

UITableView называет эти методы его delegate или dataSource, чтобы получить информацию о том, что он должен показать, и общаться, когда происходят определенные действия. Для UITableViewController сам контроллер является как делегатом, так и источником данных. Поэтому вы не увидите, что эти методы вызываются, если вы не установите в них точку останова.

Вызывается, когда пользователь переходит к представлению? Если да, то как?

Когда пользователь переходит к представлению, реализация по умолчанию UITableViewController устанавливает делегат и исходные данные свойства вида таблицы для self. В самом представлении таблицы эти методы лениво используются, когда ему нужна информация для создания, размера, макета и отображения табличных ячеек соответствующим образом.

И как все эти разные функции имеют одно и то же имя? I.e func tableView()

Этого нет. В Swift и Objective-C имена аргументов являются частью имени метода. Например, этот метод:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 80 
} 

назван tableView(_:heightForRowAtIndexPath:).

+0

Спасибо @Aaron. Я все еще немного в темноте. Вы сказали: «UITableView вызывает эти методы на своем делетете или источнике данных» и «сам вид таблицы вызывает эти методы лениво». Мой вопрос: как это происходит? Как UITableView вызывает эти методы? Это что-то встроенное в класс UITableView? Любая помощь будет оценена по достоинству. –

+0

Да, он встроен в класс UITableView. –

+0

Очень ценится. –

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