2015-05-13 3 views
2

У меня проблема при загрузке представления, он загрузит UIBarButtonItem, но тогда я должен установить его в nil в «mostra_filtro_btn», но затем снова в «load_map» мне нужно установить это, но оно не появляется. Вот мой код:UIBarButtonItem не отображается

// 
// FirstViewController.m 
// House Finder 
// 
// Created by Giovanni Poli on 12/05/15. 
// Copyright (c) 2015 Giovanni Poli. All rights reserved. 
// 

#import "MapViewController.h" 
#import <QuartzCore/QuartzCore.h> 
#import "Reachability.h" 
#import "UIKit/UIKit.h" 
#import <Foundation/Foundation.h> 
#import "FiltroViewController.h" 

@interface MapViewController() 

@end 

@implementation MapViewController 
@synthesize filtro_controller,overlay_filtro_counter,mappa_controller; 



-(void)load_map{ 
    NSLog(@"load_map"); 
    [mapView removeFromSuperview]; 
    [mappa_controller.view removeFromSuperview]; 
    [filtro_controller.view removeFromSuperview]; 

    UIBarButtonItem *Button = [[UIBarButtonItem alloc] initWithTitle:@"Filtro" style:UIBarButtonItemStyleBordered target:self action:@selector(mostra_filtro_btn:)]; 
    [Button setTitle:@"Filtro"]; 
    [Button setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName,nil]forState:UIControlStateNormal]; 
    self.navigationItem.rightBarButtonItem = Button; 
} 

- (id) init{ 
    filtro_controller = [[FiltroViewController alloc]init]; 
    [self.view addSubview:filtro_controller.view]; 
    [self addChildViewController:filtro_controller]; 
    return self; 
} 


- (void)viewDidLoad { 
    self.title = @"Mappa"; 
    self.navigationItem.title = @"House Finder"; 
    self.navigationController.navigationBar.translucent = FALSE; 
    UIBarButtonItem *Button = [[UIBarButtonItem alloc] initWithTitle:@"Filtro" style:UIBarButtonItemStyleBordered target:self action:@selector(mostra_filtro_btn:)]; 
    [Button setTitle:@"Filtro"]; 
    [Button setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName,nil]forState:UIControlStateNormal]; 
    self.navigationItem.rightBarButtonItem = Button; 

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"]; 
    NSData *content = [[NSData alloc] initWithContentsOfFile:filePath]; 
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:content options:kNilOptions error:nil]; 
    NSArray * json_all = [json objectForKey:@"results"]; 






    mapView = [[MKMapView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-40)]; 
    mapView.delegate = self; 
    mapView.showsUserLocation = NO; 
    mapView.userInteractionEnabled = YES; 
    CLLocationCoordinate2D annotationCoord; 
    self.view.userInteractionEnabled = YES; 

    NSDictionary * temp; 
    for (id object in json_all) { 
     temp = object[@"titolo"]; 
     annotationCoord.latitude = [object[@"lat"] floatValue]; 
     annotationCoord.longitude = [object[@"lon"] floatValue]; 
     MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init]; 
     annotationPoint.coordinate = annotationCoord; 
     annotationPoint.title = object[@"titolo"]; 
     annotationPoint.subtitle = object[@"agenzia"]; 
     [mapView addAnnotation:annotationPoint]; 
    } 

    [mapView showAnnotations:[mapView annotations] animated:YES]; 
    [self.view addSubview:mapView]; 
    [self.view setNeedsDisplay]; 
} 


- (IBAction) mostra_filtro_btn: (id)sender{ 
    NSLog(@"mostra_filtro_btn"); 
    self.navigationItem.rightBarButtonItem = nil; 


    filtro_controller = [[FiltroViewController alloc]init]; 
    [self.view addSubview:filtro_controller.view]; 
    [self addChildViewController:filtro_controller]; 
} 







- (MKAnnotationView *)mapView:(MKMapView *)mapViews viewForAnnotation:annotation{ 
    if (annotation == mapViews.userLocation) return nil; 
    MKPointAnnotation * temp = annotation; 
    MKAnnotationView * m = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"casa"]; 
    m.canShowCallout = YES; 
    m.enabled = YES; 
    m.userInteractionEnabled = YES; 
    NSString * icon_file = [NSString stringWithFormat:@"%@.png",temp.subtitle]; 
    m.image = [UIImage imageNamed:icon_file]; 
    return m; 
} 


- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{ 
    NSLog(@"overlay prezzo"); 

} 




- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 

@end 
+0

Try: 'self.navigationController.navigationItem.rightBarButtonItem = nil; не // Или [self.navigationItem setRightBarButtonItem: ноль анимированный: NO]; ' вместо ' self.navigationItem.rightBarButtonItem = ноль; ' в вашем mostra_filtro_btn действия метода – iYoung

ответ

0

Поскольку я не могу опубликовать это как комментарий, вот что я думаю, что отсутствует в load_map:

dispatch_async(dispatch_get_main_queue(), ^{ 
     NSLog(@"load_map"); 
    [mapView removeFromSuperview]; 
    [mappa_controller.view removeFromSuperview]; 
    [filtro_controller.view removeFromSuperview]; 

    UIBarButtonItem *Button = [[UIBarButtonItem alloc] initWithTitle:@"Filtro" style:UIBarButtonItemStyleBordered target:self action:@selector(mostra_filtro_btn:)]; 
    [Button setTitle:@"Filtro"]; 
    [Button setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName,nil]forState:UIControlStateNormal]; 
    self.navigationItem.rightBarButtonItem = Button; 
}) 

Это является возможным решением, пока вы пытаетесь его. Если вы разделите код с того места, где вы назовете load_map, было бы здорово!

Cheers!

+0

ни работает ... –

+0

здесь код от того, где я называю«load_map» –

+0

с другой точкой зрения MapViewController * map_view_controller = [MapViewController Alloc]; [map_view_controller load_map]; –

0

Ваш код работает отлично, как вы сказали, вы добавляете кнопку с методом mostra_filtro_btn : в методе viewDidLoad, а при нажатии кнопки кнопка из панели навигации установлена ​​на ноль.

Но проблема в том, что из ниоткуда вы вызываете метод load_map. Вы должны вызвать этот метод, как только кнопка получит нуль, чтобы вернуть ее с помощью метода load_map.

Можете ли вы это получить.

Наслаждайтесь кодированием !!

+0

Я вызываю метод load_map в другом представлении другого класса –

+0

MapViewController * map_view_controller = [MapViewController alloc]; [map_view_controller load_map]; –

+0

Возможно ли, что этот метод вызывается после того, как пользователь удалил кнопку правого бара, а просмотр уже загружен? Я думаю, что метод не вызывается после загрузки вида. Печатает ли журнал при вызове '[map_view_controller load_map];'? –

2

Используйте следующий код всухую элемента навигации, так что будет скрывать где вы хотите

[self.navItem setRightBarButtonItem:nil]; 
[self.navItem setLeftBarButtonItem:nil]; 
+0

. Проблема в том, что она не появляется, когда я устанавливаю ее в методе «load_map», она исчезает без проблем –

2

Попробуйте сначала создать UIButton затем поместить его в кнопку навигации, как следовать

UIButton *backButton = [[UIButton alloc] initWithFrame: CGRectMake(0, 0, 44.0f, 30.0f)]; 
[backButton setImage:[UIImage imageNamed:@"back.png"]  forState:UIControlStateNormal]; 
[backButton addTarget:self action:@selector(popVC) forControlEvents:UIControlEventTouchUpInside];   
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]  initWithCustomView:backButton]; 
+0

такая же история, когда вызывается метод «load_map», t появляется ... –

Смежные вопросы