2014-12-25 5 views
0

Когда я использую UITableViewController для создания tableView, вы получаете много функций переопределения, но когда вы используете обычный UIViewController, вы получаете ошибку при использовании этих же функций переопределения, и вы вынуждены чтобы изменить их на обычные функции. Я считаю, поэтому мои основные данные не загружаются в мои ячейки и пытались использовать функцию viewDidLoad для загрузки моих данных.Swift - функции переопределения в UIViewController vs UITableViewController

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

Моих усилий до сих пор:

override func viewDidLoad() { 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     // Configure the cell... 

     let CellID:NSString = "CELL" 

     var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(CellID) as UITableViewCell 

     if let ip = indexPath as Optional { 

      var data:NSManagedObject = myList[ip.row] as NSManagedObject 
      cell.textLabel!.text = data.valueForKeyPath("username") as? String 
     } 

     return cell 
    } 
} 

ли функция переопределения причина мои клетки пусты, или есть другие аспекты при использовании регулярных UIViewController, чтобы показать Tableview?

Любые предложения будут оценены.

ответ

1

(1) Вы должны добавить UITableViewDelegate к классу для того, чтобы получить доступ к методам делегата, экс:

class ViewController: UIViewController, UITableViewDelegate { 

После добавления UITableViewDelegate к классу, ваши UITableView делегировать функции должны автозаполнения.

Кроме того, убедитесь, что делегат UITableView назначен self, чтобы методы делегата заполнили таблицу.

(2) Прямо сейчас, ваш cellForRowAtIndexPath метод в пределах ваш viewDidLoad. Переместите его, чтобы он не содержался ни в каком другом методе.

+0

Я добавил UITableViewDelegate, так как я сказал, что приложение запускается, оно просто не заполняет таблицу. Я также пытался использовать функцию cellForRowAtIndexPath вне viewDidLoad, но это не сработало. Что касается установки делегата на «я», я не совсем уверен, что вы имеете в виду, поэтому я не могу ответить на это. Но, как я уже сказал, все, что я сделал, просто передал мой код из tableViewController в viewController, добавил UITableViewDelegate и удалил «переопределение» перед некоторыми функциями. – martin

+0

@ frank21 1. Вам нужно «переопределить». Теперь, когда вы добавили UITableViewDelegate, попробуйте снова ввести функции делегата tableview. Они должны автозаполнять, чтобы включить переопределение. –

+0

2. Вам нужно будет установить делегат tableview для себя, либо программно (например, 'self.tableView.delegate = self'), либо с помощью конструктора интерфейса, например: http://stackoverflow.com/a/19216613/2274694 –

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