2015-11-19 3 views
2

перед результатами поиска, мои didSelectRowAtIndexPath работает отлично:didSelectRowAtIndexPath работает неправильно с результатов поиска

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    performSegueWithIdentifier("fromContactsToChat", sender: OneRoster.userFromRosterAtIndexPath(indexPath: indexPath)) 
} 

, но когда я ищу что-то и нажмите на результат, он видит мой контакт как старый мобильный indexPath Tableview. Например:

Сначала мой Tableview выглядит как:

Third User 
First User 
Second User 

Когда я ищу First он показывает мне

First User 

, но когда я нажимаю на него, он видеть мою First User, как Third User из моего старого стола, поэтому там

OneRoster.userFromRosterAtIndexPath(indexPath: indexPath)) 

Я иду t Third User учетные данные. Как я могу его обновить и исправить? Когда я нажимаю на ячейку на экране поиска, она откроется именно для этого найденного контакта.

Если у вас есть какие-либо вопросы, спрашивайте меня, пожалуйста

UPDATE

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> onlineUserCell { 
    let cell:onlineUserCell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! onlineUserCell 
    var us : User 

    if tableView == self.searchDisplayController!.searchResultsTableView { 
     us = filteredUsers[indexPath.row] 
     cell.username.text = us.name 
     cell.avatarImage.image = us.image 

     tableView.rowHeight = 60 
     cell.avatarImage.layer.cornerRadius = cell.avatarImage.frame.size.height/2 
     cell.avatarImage.clipsToBounds = true 
    } else { 
     let user = OneRoster.userFromRosterAtIndexPath(indexPath: indexPath) 
     let photoData = OneChat.sharedInstance.xmppvCardAvatarModule?.photoDataForJID(user.jid) 

     cell.greenIndicator.alpha = 1 
     if user.isOnline() { 
      cell.greenIndicator.backgroundColor = UIColor.greenColor() 
     } else { 
      cell.greenIndicator.backgroundColor = UIColor.redColor() 
      // here here 
     } 

     cell.username.text = user.displayName 
     configurePhotoForCell(cell, user: user) 

     cell.avatarImage.layer.cornerRadius = cell.avatarImage.frame.size.height/2 
     cell.avatarImage.clipsToBounds = true 
    } 

    return cell 
} 

UPDATE 2

struct User { 
    let name : String 
    let image: UIImage 
} 

UPDATE 3

public class func userFromRosterAtIndexPath(indexPath indexPath: NSIndexPath) -> XMPPUserCoreDataStorageObject { 
    return sharedInstance.fetchedResultsController()!.objectAtIndexPath(indexPath) as! XMPPUserCoreDataStorageObject 
} 
+0

Я верю, что вы «видеть» данные в viewDidLoad, попытайтесь переместить логики для просмотраDidAppear, это должно решить вашу проблему. – Greg

+0

, но я заполняю свой tableView в 'cellForRowAtIndexPath' @Greg –

+0

Можете ли вы опубликовать код для cellForRowAtIndexPath? – Johnykutty

ответ

2

Ваша реализация didselectRowAtIndexPath должна быть как

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if tableView == self.searchDisplayController!.searchResultsTableView { 
     performSegueWithIdentifier("fromContactsToChat", sender: filteredUsers[indexPath.row]) 
    } 
    else { 
     performSegueWithIdentifier("fromContactsToChat", sender: OneRoster.userFromRosterAtIndexPath(indexPath: indexPath)) 
    } 
} 

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

+0

Извините, я не говорил о моей структуре. Пожалуйста, посмотрите мой вопрос, обновите 2. Итак, перед этим я использовал 'var us: User' эту строку внутри' cellForRowAtIndexPath'. Когда я использовал ваш код и вставлял 'var us' out' cellForRowAtIndex', я получил 2 ошибки:' Class 'ContactListTableViewController' не имеет инициализаторов' и ​​'Невозможно преобразовать значение типа 'Пользователь' в ожидаемый тип аргумента 'AnyObject?' ' –

+0

updated answer, pls try – Johnykutty

+0

Теперь я получаю это: 'Не могу подстроить значение типа '[Пользователь]'' on line: 'performSegueWithIdentifier (" fromContactsToChat ", sender: filtersUsers [indexPath.row])' –

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