Кнопка сегмента не отображается на панели навигации в iphone

#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, и вы пытаетесь установить объект для него. следовательно, вы получаете ошибку.