2012-11-12 16 views
6

Chcę ustawić programowo przycisk nawigacjiItem.titleView.Jak ustawić przycisk nawigacjiItem titleView?

Próbowałem z następującego kodu, ale bez powodzenia;

UIBarButtonItem *navigationTitleButton = [[UIBarButtonItem alloc] initWithTitle:@"Custom" style:UIBarButtonItemStyleBordered target:self action:@selector(backToHOmePage)]; 

navigationTitleButton.image = [UIImage imageNamed:@"title.png"]; 

self.navigationItem.titleView = navigationTitleButton; 

Warnng mówi: Niezgodne typy wskaźnik przypisanie 'UIView *' od 'UIBarButtonItem * __ silnej'

Odpowiedz

13

spróbuje użyć tego kodu, czy to działa dla Ciebie

UIView * container = [[UIView alloc]initWithFrame:CGRectZero]; 
UIButton * button = [[UIButton alloc]initWithFrame:CGRectZero]; 
[button addTarget:self action:@selector(backToHOmePage) forControlEvents:UIControlEventTouchUpInside]; 
[button setImage:[UIImage imageNamed:@"clanak_default.png"] forState:UIControlStateNormal]; 
[button sizeToFit]; 
[container addSubview:button]; 
[button release]; 
[container sizeToFit]; 
self.navigationItem.titleView = container; 
[container release]; 
+0

Świetnie. Teraz rozumiem, gdzie się myliłem. Dziękuję Ci. – CroiOS

+7

Twoje rozwiązanie działa, dziękuję! Dlaczego jeśli UIButton jest podklasą UIView, to UIButton nie może być użyty bezpośrednio jako titleView? – cph2117

+0

Będzie działać z Uibuttonem, UILabel itp. Wystarczy initWithFrame widoczny rozmiar UIView. Zobacz poniżej odpowiedź Evgenjy S. – Chucky

0

Spróbuj utworzyć obiekt UIButton dla przycisku zamiast UIBarButtonItem jednym. UIButton jest podklasą UIView, więc powinieneś być w stanie ustawić właściwość titleView na UIButton, który utworzyłeś.

10

Nie musisz tworzyć BarItem, musisz utworzyć obiekt klasy UIView;

ARC

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; 
view.backgroundColor = [UIColor clearColor]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
button.frame = view.frame; 

[view addSubview:button]; 

self.navigationItem.titleView = view; 

lub

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(0, 0, 40, 40); 
    self.navigationItem.titleView = button; 
0

Można dodać przycisk na widoku następnie dokonać tego widoku, jak widok tytułowej pasku nawigacyjnym, a następnie można zmienić tytuł przycisk w perspektywie czas łatwo.

2

wersja Swift:

var button = UIButton.buttonWithType(UIButtonType.Custom) as UIButton 
button.frame = CGRectMake(0, 0, 100, 40) as CGRect 
button.backgroundColor = UIColor.redColor() 
button.setTitle("Button", forState: UIControlState.Normal) 
button.addTarget(self, action: Selector("clickOnButton:"), forControlEvents: UIControlEvents.TouchUpInside) 
self.navigationItem.titleView = button 

Tutaj można zobaczyć w ostatni guzik linii jest ustawiona bezpośrednio do titleView z navigationItem która będzie dodać przycisk na środku paska nawigacyjnego.

metoda działania na przycisk poniżej:

func clickOnButton(button: UIButton) { 

} 
2

Możesz dodać UIImageView jako navigationItem za titleView bezpośrednio, jednakże nie będą widoczne, jeśli nie upewnij się, że jest wielkości. Najłatwiejszym sposobem na jego rozmiar jest użycie metody sizeToFit().

W tym przykładzie również zaokrąglam narożniki i dodam możliwość sprawdzenia, czy jest podsłuchiwany.

override func viewDidLoad() { 
    super.viewDidLoad() 

    let titleIconButton = UIButton(type: .Custom) 
    titleIconButton.setImage(UIImage(named: "login-icon"), forState: .Normal) 
    titleIconButton.addTarget(self, action: #selector(titleIconTap), forControlEvents: .TouchUpInside) 
    titleIconButton.clipsToBounds = true 
    titleIconButton.layer.cornerRadius = 4 
    titleIconButton.sizeToFit() 
    navigationItem.titleView = titleIconButton 
} 

enter image description here

1

Swift 3 Wersja:

let logoButton = UIButton(type: .custom) 
    logoButton.setImage(#imageLiteral(resourceName: "Logo"), for: .normal) 
    logoButton.sizeToFit() 
    logoButton.addTarget(self, action: #selector(tapLogo), for: .touchUpInside) 

    self.navigationItem.title = "" 
    self.navigationItem.titleView = logoButton 
0

Jeśli planujesz zmianę button.title w czasie wykonywania, a zmienić tytuł na dłuższym tekście, nie będzie się koncentrować. A jeśli zrobisz button.sizeToFit(), zostanie wyśrodkowany, ale nowy tytuł będzie oznaczony jako "T..e".

Rozwiązaniem jest umieszczenie UIButton w UIView. I ograniczaj przycisk do wszystkich stron UIView. Następnie wystarczy ustawić nawigacjęItem.titleView do tego UIView. I doskonale poradzi sobie z programowymi zmianami tytułu.

Powiązane problemy