2016-02-14 2 views
1

У меня есть TableView, встроенный в NavigationController (и встроенный в контроллер TabBar). У меня есть кнопка имени пользователя в каждой ячейке, которая переходит в профиль пользователя.Ошибки RefreshControl сначала Cell of TableView, после использования Back on NavBar

enter image description here

Однако после того, как я ударил «назад» на панели навигации страницы профиля, и получает направляется обратно в Tableview, похоже, я прослушивал что-то.

enter image description here

enter image description here

И если я снова тянуть, это refreshs, но на этот раз, имя пользователя верхняя строка становится unclickable в то время как остальные строки работают как и ожидалось.

Обратите внимание, что я вызываю self.theRefreshControl = UIRefreshControl() в viewDidLoad в tableView, но я не уверен, что он вызван или не вызван, после использования кнопки «Назад».

Обратите внимание, что я выполняю segue с prepareForSegue.


Чтобы обернуть

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

  • Если я иду на уведомления, и вытащить обновление, кнопка имени пользователя в первом ряду не работает

  • Если я перейду к уведомлению и не обновлять, кнопки имени пользователя и обратно работают (так что это не ошибка).

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

  • Если я обновляю уведомления, это не позволяет мне нажимать на имя пользователя в верхней строке. Если я нажимаю на второе имени пользователя во второй ячейке, она перетекает в профиль пользователя, но когда я нажимаю кнопку назад, то это ошибка, как это:

enter image description here

Код в ViewDidLoad():

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.theRefreshControl = UIRefreshControl() 
    self.theRefreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh") 
    self.theRefreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged) 
    self.tableView.addSubview(theRefreshControl) 
} 

func refresh(sender: AnyObject) { 
    if isFirstLoad == false { 
     currentPage = 1 
     getStuff() 
    } 

    self.theRefreshControl.endRefreshing() 
} 

Я также попытался добавить self.tableView.backgroundView = refreshControl выше и ниже self.tableView.addSubview(theRefreshControl); а также попытался заменить self.tableView.addSubview(theRefreshControl) с self.tableView.backgroundView = refreshControl, но, к сожалению, не повезло

+0

Он отлично работает до начала? – Quantaliinuxite

+0

Да, кнопка имени пользователя работает отлично до начала. Я просто понял, что если я перейду на эту страницу и не буду обновляться, это отлично работает. Однако, как только я вытаскиваю (так что перезапускайте триггер), тогда он не сможет выполнить повторную попытку при нажатии кнопки имени пользователя. – senty

+0

http://stackoverflow.com/questions/24475792/how-to-use-pull-to-refresh-in-swift –

ответ

2

, как вы должны создать экземпляр refreshControl не так:

override func viewDidLoad() { 
    let refreshControl = UIRefreshControl() 
    refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged) 
    tableView.backgroundView = refreshControl // <- THIS!!! 
} 

, как указано в this answer.

Я думаю, что ваш refreshControl находится в передней части ваших клеток, так что, если выше не работает, попробуйте это: tableView.sendSubviewToBack(theRefreshControl) в viewDidLoad

EDIT: С tableView.sendSubviewToBack(theRefreshControl) было решение, рассмотреть вопрос о подаче ошибка с Apple, так как это должно произойти автоматически, когда вы устанавливаете refreshControl как tableView.backgroundView

+0

Mine выглядит очень похоже на это, за исключением строки 'tableView.backgroundView = refreshControl'. (Пожалуйста, уточните мой обновленный ответ, я просто добавил свой код в ViewDidLoad). Я попытался добавить 'tableView.backgroundView = refreshControl' как до, так и после' self.tableView.addSubview (theRefreshControl) ', но, к сожалению, не повезло – senty

+0

Вам нужно удалить' self.tableView.addSubview: '. Также вы называете 'endRefreshing:'? – Quantaliinuxite

+0

Да, я звоню. 'Self.theRefreshControl.endRefreshing()'. Я добавляю свой код в вопрос. Секундочку. – senty