2015-10-25 4 views
1

У меня есть tableView в viewController на панели вкладок. Когда я нажимаю элемент tabBar, tableView не освежает. Но у меня есть функция viewWillAppear:Как обновить таблицуView на вкладке tabBar item Swift?

override func viewWillAppear(animated: Bool) { 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.tableView.reloadData() 
    }) 
} 

Я пытаюсь вызвать эту функцию с панели вкладок делегат, но не работает:

func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.tableView.reloadData() 
    }) 
} 

Почему не перезагружать?

Спасибо!

+0

Вы сделали свою собственную панель вкладок. означает настраиваемая табеля –

+0

мм нет, добавлен ли контроллер TabBar, нужна ли настраиваемая табло? – user3745888

ответ

0

Вы можете найти ответ здесь: open viewcontroller from tab like in instagram camera page on IOS

В принципе, вам нужно создать контроллер, который наследуется от UITabBarController и установить его в раскадровку в пользовательский класс вашего tabBarView.

Затем установите теги на каждую вкладку с помощью раскадровки.

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

Метод Делегат должен выглядеть следующим образом:

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 
    switch item.tag{ 
    case 1: //code here 
     break 
    default: break 
    } 
} 
4

Вам не нужно включать контроллер панели вкладок в этом. Сделать это было бы излишним. Вы создадите запутанный код, который кто-то захочет вырвать позже. Обновление табличного вида в viewWillAppear(_:) - это почти всегда лучший подход.

Если все настроено правильно, метод viewWillAppear(_:) контроллера вашего вида будет вызываться каждый раз, когда пользователь выбирает эту вкладку, и ваше представление становится видимым. Поэтому, если он не вызван, у вас есть проблема где-то в дизайне панели вкладок и контроллерах представления.

Создайте новый проект и выберите шаблон с вкладками. Откройте файл SecondViewController и добавьте метод viewWillAppear(_:). Добавьте точку останова. Вы увидите, что он вызывается каждый раз, когда вы переключаетесь на вторую вкладку.

Некоторые другие мысли ...

Вы заметите в viewWillAppear(_:) документации, что он говорит, что вы должны всегда вызывать супер. Вы не. Вам следует. Но это не связано с вашей проблемой.

Кроме того, нет необходимости переключаться в основную очередь. viewWillAppear(_:) всегда будет вызываться в главной очереди.

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    tableView.reloadData() 
} 
Смежные вопросы