2016-09-07 3 views
0

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

internal func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    var returnValue = 0 

    switch(segmentedC.selectedSegmentIndex) 
    { 
    case 0: 
     returnValue = rest.count 
     break 
    case 1: 
     returnValue = fullMenu.count 
     break 
    default: 
     break 

    } 

    return returnValue 
} 

У меня есть это для моего numberOfRowsInSection и cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = tableView.dequeueReusableCellWithIdentifier("food") as! restTableViewCell 
    var cell2 = tableView.dequeueReusableCellWithIdentifier("fullM") as! fullmenuTableViewCell 
    switch(segmentedC.selectedSegmentIndex) 
    { 
    case 0: 
     let res: Rest! 
     res = rest[indexPath.row] 

     var img: UIImage? 

     if let urls = foo.imageString{ 
      img = foodViewController.imageCache.objectForKey(urls) as? UIImage 

     } 
     dispatch_async(dispatch_get_main_queue()) { 
      cell.setupViews(res) 

     } 

     break 
    case 1: 
      cell2.textLabel?.text = fullMenu[indexPath.row] 
     break 

    default: 
     break 

    } 
    return cell 
} 

Также у меня есть IBAction для сегментированного управления

@IBAction func seg(sender: AnyObject) { 

    switch(segmentedC.selectedSegmentIndex) 
    { 
    case 0: 
     tableView.reloadData() 
     break 

    case 1: 
     tableView.reloadData() 
     break 
    default: 
     break 

    } 

} 

Но когда я меняю сегмент, только одна ячейка от index 0 появляется в index 1

ответ

1

В вашей ячейкеForRowAtIndexPath вы всегда возвращаете ячейку, в которой вы никогда не возвращаете cell2. Попробуйте вернуть cell2 во второй случай.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
var cell = tableView.dequeueReusableCellWithIdentifier("food") as! restTableViewCell 
var cell2 = tableView.dequeueReusableCellWithIdentifier("fullM") as! fullmenuTableViewCell 
switch(segmentedC.selectedSegmentIndex) 
{ 
case 0: 
    let res: Rest! 
    res = rest[indexPath.row] 

    var img: UIImage? 

    if let urls = foo.imageString{ 
     img = foodViewController.imageCache.objectForKey(urls) as? UIImage 

    } 
    dispatch_async(dispatch_get_main_queue()) { 
     cell.setupViews(res) 

    } 

    break 
case 1: 
     cell2.textLabel?.text = fullMenu[indexPath.row] 
     return cell2 
    break 

default: 
    break 

} 
return cell 
} 
+0

Да, это сработало спасибо !. Но является ли это лучшим способом использования сегментированного контроля с табличными представлениями? –

+0

Зависит от вашего случая использования чувака, я не знаю вашего прецедента, поэтому я не могу быть уверен, что этот подход лучше всего или нет, но я могу предложить некоторые улучшения, например, вам не нужны случаи в вашем IBAction func seg (отправитель: AnyObject), только один раз вызывает перезагрузку, и для дополнительного бонуса поведение разрыва по умолчанию для переключателя в swift, поэтому, если вы удалите все перерывы, он будет работать точно так же. –

+0

Я испытываю медленную загрузку, когда ячейка прослушивает любую идею, почему? –