Приложение на основе просмотра iPhone переходит в основной вид

#iphone #ios #cocoa-touch

#iPhone #iOS #cocoa-touch

Вопрос:

В моем приложении на основе просмотра оно включает в себя три представления.Первый вид (основной вид) вызывает второй вид.Второй просмотр вызывает третий просмотр (подробный просмотр). Я хочу добавить функцию home в третьем представлении, чтобы вернуться к первому виду (основной вид). В настоящее время я добавляю кнопку «Домой» в третьем представлении.Но я не знаю, как написать эту функцию. Ниже приведен мой код:

 //In First view(main view)
//call second view(list view) in button click
-(IBAction) doctorList:(id)sender
{   
    if(self.doctorViewController==nil)
    {
        DoctorViewController *doctorView=[[DoctorViewController alloc] initWithNibName:@"DoctorViewController" bundle:[NSBundle mainBundle]];

        self.doctorViewController=doctorView;
        [doctorView release];
    }

    self.view addSubview:self.doctorViewController.view];}
}

//In second View(list view)
//Call third view in table cell click
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
    DoctorItem *physician=[[DoctorItem alloc]init];
    physician=(DoctorItem*)[self.tableDataList objectAtIndex:indexPath.row];    
    DoctorDetail *detail=[[DoctorDetail alloc]init];[tableView.superview addSubview:detail.view];
    [physician release];
}
  

На третьем представлении есть кнопка с надписью «Home»
Когда пользователь нажимает эту кнопку, я хочу добавить возврат к первому виду (основной вид). Я не знаю, как это сделать.

Ответ №1:

Я не видел никаких упоминаний об UINavigationControllers в публикации Phoenix… итак, если бы я исправлял этот код, я бы создал метод IBAction следующим образом:

 - (IBAction) homeButtonPressed: (id) sender
{
    // and remove the subviews

    NSArray * subviews = [self.view subviews];
    for(UIView * aSubview in subviews)
    {
        // this removes and releases the subviews you allocated
        [aSubview removeFromSuperview];
    }

}
  

и подключите действие кнопки к этому методу.

Кроме того, я бы рекомендовал подклассы UIView, а не UIViewController для DoctorView и DoctorViewController. Вам не нужен дополнительный багаж, который приносят UIViewControllers, если вы просто добавляете вложенные представления в корневой контроллер представления.

Комментарии:

1. Я тестирую ваш код. Это не может решить мою проблему. Он удаляет все вложенные представления пользовательского интерфейса только из третьего представления. Я имею в виду, что я хочу вернуться к основному виду (первому виду), когда пользователь нажимает кнопку «Домой».

2. если вы поместите этот метод в свой основной корневой контроллер, он удалит все вложенные представления (второе и третье) из вашего корневого (первого) контроллера представления. Но да, в целом, предпочтительнее использовать UINavigationController и нажимать / нажимать. 🙂

3. Я поместил этот метод в свой основной корневой контроллер. Я не знаю, как вызвать этот метод из третьего представления.

4. Я вызвал этот метод через класс AppDelegate. Но он очищает все вложенные представления, включая текстовые представления, метки. На самом деле я хочу удалить только второй и третий просмотр. Как я могу узнать, что это вложенное представление является вторым или третьим представлением?

5. Я нашел решение. Для проверки типа представления можно использовать метод isKindOfClass.’code’ if([some_object isKindOfClass:[A_Class_Name class]]){}

Ответ №2:

Поскольку вы просто перемещаетесь между контроллерами представления, вы можете просто выполнить a popToRootViewController в последнем контроллере представления, и это вернет вас к rootViewController (вашему основному представлению).

Ответ №3:

Феникс Кьяу,

Попробуйте это,

 [self.navigationController pushViewController:homeView animated:YES];
  

Здесь HomeView — это ваш экземпляр HomeViewController (куда бы вы ни захотели перейти)..

Ответ №4:

Пожалуйста, попробуйте использовать это…..

 [self.view.superview removeFromSuperview];
  

Ответ №5:

Попробуйте это,

Это сработало для меня

 [self.view addSubview:firstViewController.view];
  

или попробуйте это

 [self presentModalViewController:firstViewController animated:YES]; // this is deprecated in ios6.0