3

мне нужно добавить кнопку в UINavigationItem titleView (на самом деле в центре UINavigation БарUIButton стиль при добавлении к navigationItem.titleView

Я использовал следующий код для выполнения так:.

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btn.frame = CGRectMake(0, 0, 70, 30); 
[btn setSelected:YES]; 
[btn setTitle:@"list" forState:UIControlStateNormal]; 

И я идти следующее:

enter image description here

мне нужно дать тот же стиль кнопки «Done» (который UIBarButtonItem) к кнопке "list"?

ответ

0

Да, вы должны использовать UIBarButtonItem тоже для «списка» кнопку

используя пользовательский идентификатор и название свойства.

Вы можете использовать идентификатор UIBarButtonItem «гибкое пространство», чтобы отобразить кнопку «список» в центре.

1

UIBarButtonItems может использоваться только как элементы в UIToolbar (они не являются фактически экземплярами UIView), поэтому единственный способ прямого использования UIBarButtonItem в вашем titleView состоял в том, чтобы установить экземпляр UIToolbar в качестве titleView и добавить ваш barButtonItem к этой панели инструментов. Однако я не думаю, что это сработает.

Я думаю, что вам нужно будет найти способ имитировать стиль UIBarButtonItem, используя простой старый UIButton. Вы можете получить фактический файл изображения, используемый для создания UIBarButtonItems, используя UIKit artwork extractor. Тогда это просто вопрос создания пользовательского UIButton с использованием этого фонового изображения, и вам хорошо идти.

7

Вы можете использовать UISegmentedControl:

UISegmentedControl *mySegmentedControl = [[UISegmentedControl alloc] 
       initWithItems:@"Example"]]; 
mySegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; 
[mySegmentedControl addTarget:self action:@selector(myMethod) 
     forControlEvents:UIControlEventValueChanged]; 

self.navigationItem.titleView = mySegmentedControl; 
+0

Большое спасибо – HelloWorld

1

Я использовал подход UISegmentedControl на основе Andrej годов и расширил его немного, чтобы вести себя более как нормальный UIButton:

@interface SPWKBarButton : UISegmentedControl 
- (id)initWithTitle:(NSString *)title; 
- (void)setTitle:(NSString *)title; 
@end 

@implementation SPWKBarButton 

- (id)initWithTitle:(NSString *)title 
{ 
    self = [super initWithItems:@[title]]; 

    if (self) { 
     self.segmentedControlStyle = UISegmentedControlStyleBar; 

     NSDictionary *attributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] 
                   forKey:UITextAttributeTextColor]; 

     [self setTitleTextAttributes:attributes 
          forState:UIControlStateNormal]; 
    } 

    return self; 
} 

- (void)setTitle:(NSString *)title 
{ 
    [self setTitle:title forSegmentAtIndex:0]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesMoved:touches withEvent:event]; 

    if (CGRectContainsPoint(self.bounds, [[touches anyObject] locationInView:self])) { 
     self.selectedSegmentIndex = 0; 
    } else { 
     self.selectedSegmentIndex = UISegmentedControlNoSegment; 
    } 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesEnded:touches withEvent:event]; 

    if (CGRectContainsPoint(self.bounds, [[touches anyObject] locationInView:self])) { 
     [self sendActionsForControlEvents:UIControlEventTouchUpInside]; 
    } 

    self.selectedSegmentIndex = UISegmentedControlNoSegment; 
} 

@end 

Для основного использования, вы можете используйте его как замену UIButton:

_button = [[SPWKBarButton alloc] initWithTitle:titles[0]]; 

[_button addTarget:self 
      action:@selector(doSomething:) 
    forControlEvents:UIControlEventTouchUpInside]; 

[self.navigationItem setTitleView:_button]; 

Событие будет срабатывать только тогда, когда uchup произошло внутри границ сегментированного контроля. Наслаждаться.

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