#iphone #objective-c
#iPhone #objective-c
Вопрос:
Здравствуйте, у меня возникла проблема с отображением сегментированной кнопки на панели навигации, я пробую этот код, он не работает, у меня есть панель вкладок для вызова этой панели вкладок, я использую этот код, панель вкладок работает нормально, но кнопка на панели навигации не отображается
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITabBarController *tabcontroller = [[UITabBarController alloc] init];
UITabBarController *vc1 = [[TMapViewController alloc] init];
UITabBarController *vc2 = [[TShareController alloc]init];
UITabBarController *vc3 = [[TSpeedometerController alloc]init];
UITabBarController *vc4 = [[TReviewsController alloc]init];
NSArray *viewControllers = [NSArray arrayWithObjects:vc1,vc2,vc3,vc4,nil];
[tabcontroller setViewControllers:viewControllers];
[vc1 release];
[vc2 release];
[vc3 release];
[vc4 release];
[self.navigationController pushViewController: tabcontroller animated: YES];
}
И исправьте этот код в TMapViewController.m для вызова
Кнопка на панели навигации
-(id)init
{
UITabBarItem *tbi = [self tabBarItem];
[tbi setTitle:@"Map"];
UIImage *i = [UIImage imageNamed:@"mapper_f.png"];
[tbi setImage:i];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:
[NSArray arrayWithObjects:
[UIImage imageNamed:@"Activitieslist.png"],
nil]];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
segmentedControl.frame = CGRectMake(0, 0, 50, 35);
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.momentary = YES;
UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
[segmentedControl release];
self.navigationItem.rightBarButtonItem = segmentBarItem;
[segmentBarItem release];
return self;
}
То же самое, что я использую в
— (недействительный)viewDidLoad {
[super viewDidLoad];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:
[NSArray arrayWithObjects:
[UIImage imageNamed:@"Activitieslist.png"],
nil]];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
segmentedControl.frame = CGRectMake(0, 0, 50, 35);
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.momentary = YES;
UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
[segmentedControl release];
self.navigationItem.rightBarButtonItem = segmentBarItem;
[segmentBarItem release];
[[self.navigationBar topItem] setTitleView:segmentedControl];
[[[self.navigationBar topItem] titleView] setUserInteractionEnabled:YES];
TLocationManager *manager = [[TLocationManager alloc] init];
self.locationManager = manager;
self.locationManager.delegate = self;
[manager release];
TMapRoutes *routes = [[TMapRoutes alloc] init];
self.mapRoutes = routes;
self.mapRoutes.mapView = self.myMapView;
[routes release];
self.myMapView.delegate = self;
/* Run the simulator */
[locationManager startUpdatingLocation];
}
даже если она не работает, она выдает мне ту же ошибку.
Заранее спасибо
Хариш
Комментарии:
1. Я не думаю, что правильно понял вашу проблему. Извините, я больше не могу здесь помочь.
2. Когда я не использую вкладку, она отображает segmentBarItem > это означает, что когда я вызываю другое представление напрямую с помощью навигационного Push-представления, я думал, что это работает, чтобы отобразить элемент сегмента, но при вызове всего элемента вкладки он не отображает элемент сегмента, но панель вкладок работает
Ответ №1:
Установите ее как [self.navigationBar titleView:segmentedControl]
-(void)loadView {
UITabBarItem *tbi = [self tabBarItem];
[tbi setTitle:@"Map"];
UIImage *i = [UIImage imageNamed:@"mapper_f.png"];
[tbi setImage:i];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:
[NSArray arrayWithObjects:
[UIImage imageNamed:@"Activitieslist.png"],
nil]];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
segmentedControl.frame = CGRectMake(0, 0, 50, 35);
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.momentary = YES;
UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
[segmentedControl release];
[[self.navigationBar topItem] setTitleView:segmentedControl]; [[[self.navigationBAr topItem] titleView] setUserInteractionEnabled:YES];
[segmentBarItem release];
Комментарии:
1. я использую это в методах инициализации -(id){весь код этого [self.NavigationBar titleView:segmentedControl]; } это выдает мне запрос на ошибку для элемента ‘NavigationBar’ в чем-то, что не является структурой или объединением
2. попробуйте этот способ, [[self.NavigationBar topItem] setTitleView:segmentedControl]; [[[self.NavigationBar topItem] titleView] setUserInteractionEnabled: ДА];
3. Не записывайте в метод init. напишите весь код в методе loadview.
4. @ Anand посмотри выше, я вношу изменения
5. Я хочу сказать следующее. В методе init навигационный контроллер не будет создан, он будет создан в loadview, и вы пытаетесь установить объект для него. следовательно, вы получаете ошибку.