Я снова открываю этот вопрос, потому что мой последний был отмечен как дубликат, даже если это на самом деле нет! Это та же проблема, но решения не работают с моим кодом. Я использую swift 2.UIButton | setTitle принимает огромное количество времени даже в основной теме
Так что моя проблема в том, что название гласит: у меня есть UIButton в tableViewCell, и когда я использую метод «setTitle», для обновления заголовка требуется от 10 до 60 секунд. В то же время я использую «addTarget», и он работает мгновенно. Поэтому заголовок должен также обновляться. Моя кнопка настроена как «обычай» в моей раскадровке.
Когда представление загрузки Я бегу следующий код:
/* viewDidLoad */
override func viewDidLoad() {
super.viewDidLoad()
boolAlready = false
findParticipation()
}
/* findParticipation */
func findParticipation() {
// After server request response :
boolAlready = true
self.tableView.reloadData()
}
/* cellForRowAtIndexPath */
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellActions = tableView.dequeueReusableCellWithIdentifier(informationsCellArray[indexPath.row], forIndexPath: indexPath) as ! eventDetailsAction
if boolAlready {
cellActions.foundParticipation
} else {
cellActions.btnParticipate.setTitle("...", forState: UIControlState.Normal)
cellActions.btnParticipate.addTarget(self, action: « deleteParticion", forControlEvents: .TouchUpInside)
}
/* В моих привычках клетка */
func foundParticipation() {
self.btnParticipate.setTitle("Annuler", forState: UIControlState.Normal)
self.btnParticipate.addTarget(self, action: "deleteParticipation", forControlEvents: .TouchUpInside)
}
Разные вещи, которые я нашел на форумах, которые не работали:
Ставя свою SETTITLE действие вокруг
dispatch_async(dispatch_get_main_queue()) {}
заголовка настройки для все разницы UIControlStates
Использование
setAttributedTitle()
Использование
self.btnParticipate.setNeedsLayout()
иself.btnParticipate.layoutIfNeeded()
после SETTITLEперед отключением кнопки и включить его после SETTITLE
self.addSubview(self.btnParticipate)
Изменение названия в
titleLabel.text
Doing все упомянутый ранее в родительском представлении Controller, используя
cellActions.btnParticipate
UIView.performWithoutAnimation { self.btnParticipate.setTitle("Annuler", forState: .Normal) }
теперь я застрял и не может найти решение для этого.
Итак, метод 'foundParticipation()' _allways_ называется в основном потоке? – werediver
Да, он вызывается только в 'cellForRowAtIndexPath', который запускается' tableView.reloadData'. и вы можете использовать 'tableView.reloadData' только в основном потоке. –