2014-09-11 2 views
0

У меня есть UIToolbarButton, у которого есть UIButton для хранения изображения. Теперь, когда я нажимаю на этот UIToolbarButton, я хочу открыть другое представление в текущем представлении.TapGestureRecognizer на UIToolbarButton не работает

Мой код:

- (IBAction)btnNowPlaying:(id)sender 
{ 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
            initWithTarget:self 
            action:@selector(openPlaying:)]; 
    [self.view addGestureRecognizer:tap]; 
} 

- (void)openPlaying:(UIGestureRecognizer *)sender 
{ 
    NewMainViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Center"]; 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController * npvc = [storyboard instantiateViewControllerWithIdentifier:@"NowPlayingVC"]; 
    [vc.containerView addSubview:npvc.view]; 
} 

Это действие, btnNowPlaying находится на UIButton.

+0

Почему вы не используете свойство изображения элемента UIBarButton вместо того, чтобы помещать UIButton внутри кнопки штриха? – trevorj

+0

Изображение не отображается, если я использую свойство изображения –

+0

Отображается только цвет оттенков –

ответ

1

Похоже, вы просто хотите перейти от одного контроллера вида к другому. Просто перетащите элемент управления с панели на контроллер вида, на который вы хотите перейти в раскадровку. Затем нажмите на сегмент между двумя контроллерами представления и установите его идентификатор в инспекторе атрибутов. После этого, все, что вам нужно сделать, это реализовать prepareForSegue::

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"THE_IDENTIFIER_YOU_ENTERED_IN_THE_ATTRIBUTES_INSPECTOR"]) { 
     if ([segue.destinationViewController isKindOfClass:[NEWViewController class]]) { 
      NEWViewController *vc = (NEWViewController *)segue.destinationViewController; 
      // Any preparation you need to do for next view controller 
      vc.someProperty = someValue; 
     } 
    } 
} 

Это немного странно, чтобы открыть новый контроллер представления внутри текущего контроллера представления. Почему бы просто не перейти к нему?

Другим вариантом является назначение-init UIView вместо контроллера представления и просто addSubview:.

0

Прежде всего, вы можете использовать элемент по умолчанию UIBarButton с помощью стиля и сеттера Custom вместо создания UIButton.

Вам не нужно создавать дополнительный распознаватель жестов. Если вы подключите IBAction с помощью кнопки в Interface Builder, вы можете поместить код перехода в метод btnNowPlaying.

Другим способом является создание IBOutlet, подключение его с помощью кнопки и создание UIGestureRecognizer в методе - (void)viewDidLoad.

+0

пытался .... не повезло –

+0

- (void) viewDidLoad { [super viewDidLoad]; UIImage * i = [UIImage imageNamed: @ "1.png"]; CGSize destinationSize = CGSizeMake (25, 25); UIGraphicsBeginImageContext (destinationSize); [i drawInRect: CGRectMake (0, 0, destinationSize.width, destinationSize.height)]; UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); btnNewImage.image = newImage; // btnNewImage.tintColor = [UIColor clearColor]; } –

+0

Любой другой способ решить эту проблему? –