- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
if (indexPath.row == 0) {
if (![centerViewController isKindOfClass:[T7DUserInfoViewController class]]) {
T7DUserInfoViewController *userViewController = [[T7DUserInfoViewController alloc] init];
[navigationController popViewControllerAnimated:NO];
[navigationController pushViewController:userViewController animated:NO];
}
}
if (indexPath.row == 1) {
if (![centerViewController isKindOfClass:[T7DMapViewController class]]) {
T7DMapViewController *mapViewController = [[T7DMapViewController alloc] init];
[navigationController popViewControllerAnimated:NO];
[navigationController pushViewController:mapViewController animated:NO];
}
}
if (indexPath.row == 2) {
if (![centerViewController isKindOfClass:[T7DOrderListViewController class]]) {
T7DOrderListViewController *orderListViewController = [[T7DOrderListViewController alloc] init];
[navigationController popViewControllerAnimated:NO];
[navigationController pushViewController:orderListViewController animated:NO];
}
}
if (indexPath.row == 3) {
if (![centerViewController isKindOfClass:[T7DCurrentOrderViewController class]]) {
T7DCurrentOrderViewController *orderViewController = [[T7DCurrentOrderViewController alloc] init];
[orderViewController setOrderType:T7DOrderTypeCurrent];
[orderViewController setOrder:[T7DOrder currentOrder]];
[navigationController popViewControllerAnimated:NO];
[navigationController pushViewController:orderViewController animated:NO];
}
}
if (indexPath.row == 4) {
if (![centerViewController isKindOfClass:[T7DMessagesViewController class]]) {
T7DMessagesViewController *messagesViewConroller = [[T7DMessagesViewController alloc] init];
[navigationController popViewControllerAnimated:NO];
[navigationController pushViewController:messagesViewConroller animated:NO];
}
}
if (indexPath.row == 5) {
[self logout];
return;
}
Gerchicov-bp 01.04.2015 09:42 # 0
1)if-else работает лучше чем просто if
2)pop на себя и сразу после этого push вообще работают? Точно не помню, возможно если вызовы сделать анимированными, то работать не будет
pr0gl 01.04.2015 10:47 # 0
...И ладно бы всё это, но все эти == x, одинаковый код с разными классами и.т.п. меня вообще добивает. Почему бы не просто не замапить нужные контроллеры на нужные индексы и показывать их одним движением?
Gerchicov-bp 01.04.2015 11:53 # +2
2)то, что есть segue и storyboard - еще не значит, что они во всех отношениях лучше push и pop. Например, когда вы используете push и pop, то код инициализации у вас аккуратно лежит в одном месте, обычно вместе с этими вызовами. В случае с segue - у вас инициализация размазана по коду и скорее всего еще залезла на storyboard (имею в виду указание id перехода).
3)опять же можно заменить для данного конкретного случая. А если у вас инициализация - не просто init..., а initWith..., причем разная для разных контроллеров? Максимум объединить вызовы push/pop
P.S. вдогонку к 2) - существуют библиотеки вроде reactive cocoa или promise kit, которые собирают распределенный код в одном месте/вызове
pr0gl 01.04.2015 12:31 # 0
2) >>а initWith...
Если у ваших контроллеров верхнего уровня (которые вы пушите) сложная инициализация - вы что-то делаете не так, контроллер он же не вьюшка, контроллер может данных для себя и сам набрать. Не зря же модели придуманы, верно?
>> В случае с segue - у вас инициализация размазана по коду
Так и хорошо же, каждому экрану лучше знать куда он ведёт и, соответственно, как и что инициализировать.
P.S. reactive cocoa решает не совсем эту задачу, на самом деле.
Gerchicov-bp 01.04.2015 15:45 # 0
>>Так и хорошо же, каждому экрану лучше знать куда он ведёт и, соответственно, как и что инициализировать.
Так экрану хорошо и с push/pop, вот только программисту не особо весело прыгать по коду выискивая инициализацию.
Reactive cocoa выполняет не конкретно эту задачу а очень похожую - вместо того, чтобы например послать запрос в одном куске, обработать результат в другом и обработать ошибки в третьем - вы пишете все одним сплошным кодом, сохраняя при этом асинхронность вызовов