2015-11-18 3 views
1

Я видел несколько вопросов здесь об этом, но не defitnive ответ Im не используя до даты версии Xcode и скор ...Swift 2.0 два просмотров таблицы в один вид контроллера cellForRowIndexPath

Im пытается работать с двумя столовыми просмотры в одном контроллере представления здесь моя cellForRowIndexPath функции

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    var cell: UITableViewCell! 

    if(tableView == self.allTableView){ 

     cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! BMRadioAllTableViewCell 

      cell.mixImage.image = mixPhotoArray[indexPath.item] 

      let dateFormatter = NSDateFormatter() 
      dateFormatter.dateFormat = "yyyy-MM-dd" 
      cell.mixDateLabel.text = dateFormatter.stringFromDate(mixDateArray[indexPath.item]) 


    } 

    if(tableView == self.featuredTableView){ 
    // SET UP THE NEXT TABLE VIEW 

    } 


    return cell 
    } 

Im получает ошибку «значение типа UITableViewCell не имеет ни один из членов„XXXX“поэтому его, очевидно, не регистрируя изменений в камеру я делаю в если заявлении.

У меня есть попробовал другие способы, например, объявить переменную внутри оператора if и вернуть ее там. Но вы получаете сообщение об ошибке «Отсутствие возврата в функции, ожидаемой для возврата UITableViewCell», поскольку вам нужно получить ее за пределами оператора if.

+0

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

ответ

0

Ошибка на самом деле не связана с тем, что вы пытаетесь настроить два вида таблицы.

Даже если вы выставляете результат dequeueReusableCellWithIdentifier:forIndexPath: в BMRadioAllTableViewCell, вы назначаете его переменной типа UITableViewCell!. Таким образом, для вас будет ошибка компилятора для доступа к полям BMRadioAllTableViewCell.

Вы бы необходимо либо изменить cell типа к BMRadioAllTableViewCell или имеют локальную область действия переменной соответствующего типа, настроенному и затем присвоить cell:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell: UITableViewCell! 

    if(tableView == self.allTableView){ 

     let bmRadioAllCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! BMRadioAllTableViewCell 

     bmRadioAllCell.mixImage.image = mixPhotoArray[indexPath.item] 

     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd" 
     bmRadioAllCell.mixDateLabel.text = dateFormatter.stringFromDate(mixDateArray[indexPath.item]) 

     cell = bmRadioAllCell 
    } 

    if(tableView == self.featuredTableView){ 
    // SET UP THE NEXT TABLE VIEW 

    } 


    return cell 
} 
+0

Большое спасибо, что работает! Только проблема Im теперь заключается в том, что после завершения первого оператора if для allTableView все в порядке. Но, похоже, не будет работать другой оператор if, я изменил его на другое, добавив println, чтобы проверить настройку второго tableView, но он не выполнит его. Есть идеи? – user4671001

+0

Если вам не кажется, что часть исполняемого кода 'tableView == self.featuredTableView' выполняется, возможно, вы забыли подключить' FeaturedTableView' 'IBOutlet' в своем раскадровке. –

+0

Отсутствует источник данных, спасибо вам, мужчина! – user4671001

2

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    if(tableView == self.allTableView){ 
     var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! BMRadioAllTableViewCell 

     cell.mixImage.image = mixPhotoArray[indexPath.item] 

     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd" 
     cell.mixDateLabel.text = dateFormatter.stringFromDate(mixDateArray[indexPath.item]) 

     return cell; 
    } else { 
     var cell = ... 
     // SET UP THE NEXT TABLE VIEW 
     return cell 
    } 
} 

Там нет необходимости иметь один общий cell переменную, которая обрабатывает обе таблицы.

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