Вот настройка моего приложения для iPhone:
У меня есть UITabBarController с 4 контроллерами представления (1 UINavigationController и 3 UIViewControllers).
При загрузке моего приложения по умолчанию используется UINavigationController, где есть сгруппированный UITableView, который дает две опции навигации, когда пользователь нажимает первую опцию, соответствующий UITableViewController (содержит список местоположений) помещается в стек.
То, что я хотел бы сделать на экране, - это иметь UISegmentedControl, который имеет две опции: «представление списка» (которое пользователь видит по умолчанию при нажатии на UIViewController) и «представление карты», которое позволит места, которые будут представлены на карте.
Я использую следующий код для создания UISegmentedControl на панели навигации:
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentItems];
[segmentedControl setSelectedSegmentIndex:0];
[segmentedControl setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[segmentedControl setSegmentedControlStyle:UISegmentedControlStyleBar];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
[[self navigationItem] setTitleView:segmentedControl];
[segmentedControl release];
И этот метод будет вызывать элемент управления UISegmented при изменении:
- (void) segmentAction:(id)sender
{
UISegmentedControl *segmentControl = sender;
if([segmentControl selectedSegmentIndex] == 0)
{
NSLog(@"LIST VIEW CHOSEN!");
}
else
{
NSLog(@"MAP VIEW CHOSEN!");
}
}
Так что в основном мой вопрос заключается в том, как правильно / наилучшим образом реализовать то, что я пытаюсь достичь, я не хочу помещать контроллер в стек навигации, я просто хочу переключить его на место (возможно, с помощью анимации). Все интерфейсы встроены в IB.
Один из способов, которым я пытался это сделать, - это сработало, но не показалось, что это было правильным, - создать два отдельных UIViews в моем nib-файле (один для представления списка и один для представления карты), а затем используя setView: соответственно .. но тогда я подумал, не должно ли каждое из этих представлений иметь собственный контроллер и / или собственный кончик?
- (void) segmentAction:(id)sender
{
UISegmentedControl *segmentControl = sender;
if([segmentControl selectedSegmentIndex] == 0)
{
NSLog(@"LIST VIEW CHOSEN!");
[self setView:listView]; //Declared as an UIView IBOutlet
}
else
{
NSLog(@"MAP VIEW CHOSEN!");
[self setView:mapView]; //Declared as an UIView IBOutlet
}
}
В некоторых полуотождественных примерах, с которыми я сталкивался, используются «removeFromSuperview» и «addSubview», и это несколько меня смутило, я относительно новичок в разработке Cocoa Touch, так что любая помощь, помогающая мне разобраться в этом, будет принята. *
Спасибо