2012-11-05 2 views
7

Я делаю приложение iOS, которое является базой таблицы. Вот что я хочу сделать. Tableview1 -> Tableview2 Как только я выбираю один из tableCell, отображается новый tableView2. Я хотел бы высветить ячейку, пока не появится новый tableView. Тем не менее, hilight настолько медленный из-за загрузки новых данных TableView. Я посмотрел на это. Причина, почему prepareForSegue вызывается до didSelectRowAtIndexPath.Как позвонить didSelectRowAtIndexPath перед тем, как подготовитьForSegue?

Тогда вы могли бы рассказать мне, как позвонить didSelectRowAtIndexPath до prepareForSegue?

Или скажите мне, как настроить ячейку таблицы, когда выбрана ячейка.

Все самое лучшее.

ответ

1
  1. Сделать переход для контроллер-> Контроллер
  2. загрузка прогон данных в didselectrowatindexpath
  3. Когда сделано -> выполнить ваш переход
+0

Performsegue является лучшим ответом. Но еще одна проблема. Но спасибо в любом случае! –

0

Вот как вы должны настроить ваш вид контроллеры:

  1. Когда корпус контроллера вида View Table 1 загружает, загружает данные Table View 1.
  2. В tableView:didSelectRowAtIndexPath: называется, сработает с использованием performSegue:.
  3. Когда вид контроллера жилья Таблица 2 Вид нагрузки, нагрузки в данных для Table View 2.

Это звучит, как вы могли бы загрузить данные для Table View 2 преждевременно --- поэтому вам» видя отставание. Поскольку вы связываете основной поток с загрузкой данных, пользовательский интерфейс не имеет возможности обновлять и показывать вам синюю подсветку.

Если вы загружаете свои данные в методе viewDidLoad, вы избежите дорогостоящих нагрузок, когда пользователь выбирает ячейку просмотра таблицы. Вы должны указывать только контроллеру вида, чтобы выполнить команду segue в контроллере подробного представления в методе tableView:didSelectRowAtIndexPath:.

+0

Спасибо, что работает. performSegue лучше ответить до сих пор. –

20

Вы соединяете два разных способа сделать это.

1 - Первая альтернатива - использовать только раскадровку и prepareForSegue:

Подключите прототип ячейку ко второму ViewController в раскадровке (соединение должно начинаться с клетки и заканчивается на втором ViewController). В этом случае вы должны использовать только метод prepareForSegue, а не didSelectRowAtIndexPath. Второй VC автоматически активируется после команды prepareForSegue.

2 - Вторая альтернатива - использование didSelectRowAtIndexPath:

используется didSelectRowAtIndexPath только при подключении SEGUE с первого ViewController (а не из клетки) ко второму ViewController. В конце метода didSelectRowAtIndexPath вы должны вызвать performSegue.

+0

Спасибо! он работает, но возникает другая проблема. Я напишу новую тему об этом. –

+16

Если вы используете первый вариант и должны принять действие на основе позиции ячейки в таблице, используйте это, чтобы получить правильный indexPath: NSIndexPath * indexPath = self.tableView.indexPathForSelectedRow; – mpemburn

+0

Вторая альтернатива работала для меня. –

1

Вам нужна следующая функция. Он будет вызываться до подготовленнойForSegue. Прежде всего, необходимо определить вар в вас классе затем установить его в этой функции, как ниже:

var selectedIndexPath: NSIndexPath = NSIndexPath() 

override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
     selectedIndexPath = indexPath 
     return indexPath 
    } 

Тогда, наконец, вы можете использовать это значение в функции preparedForSegue

+0

Nice работал для меня тоже спасибо :) Хамид –

+0

@AadilAli Без проблем :) – Hamid

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