2014-05-25 30 views
16

Herkese selam Benim uygulamada, bir tablo görünümünü görüntülemek için dışarı çıkacak bir yan menüm var ve orada görünür görünüm denetleyicisini kullanan görevlerim var. Segue, doğrudan kontrolöre bağlanmalı, aksi halde uygulama çökecektir, bu yüzden bir navigasyon denetleyicisi kullanamıyorum. Sorum şu: Gezinme denetleyicisi olmayan bir çubuk düğme öğesinin bulunduğu gezinme çubuğunu nasıl ekleyebilirim. Tüm düzenlerimi hikaye panosunda yaptım. Sorunuzu yanıtlamak için birkaç akıllı yolu olsaGezinme denetleyicisi olmadan bir görünüme gezinti çubuğu nasıl eklenir

the app does not

cevap

17

the story board has the navigation item

. Sadece programlı bunu çözmüş ve benim viewWillAppear aşağıdaki kodu yazdım (not - viewDidLoad da tamam, ama tavsiye edilmez) - Yani

 
-(void) viewWillAppear:(BOOL)animated { 

    UINavigationBar *myNav = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; 
    [UINavigationBar appearance].barTintColor = [UIColor lightGrayColor]; 
    [self.view addSubview:myNav]; 


    UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:nil]; 

    UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                   style:UIBarButtonItemStyleBordered 
                   target:self action:nil]; 


    UINavigationItem *navigItem = [[UINavigationItem alloc] initWithTitle:@"Navigation Title"]; 
    navigItem.rightBarButtonItem = doneItem; 
    navigItem.leftBarButtonItem = cancelItem; 
    myNav.items = [NSArray arrayWithObjects: navigItem,nil]; 

    [UIBarButtonItem appearance].tintColor = [UIColor blueColor]; 
} 

, bir navigasyon kontrolörü olmadan mavi çubuk düğme öğeleri ile beyaz gezinti çubuğu . Yine, davasında bunu uygulamak için başka yollar var. Umarım bu yardımcı oldu.

Çıktı -

enter image description here

Güncelleme -

eklemek için görüntüleri - bunun için arayüz oluşturucu NavigationItem kullanmak için bir yol yoktur

UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,10,32,32)]; 
[myImage setImage:[UIImage imageNamed:@"image.png"]]; 
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myImage]; 
[self.view addSubview:myImage]; 
+0

merhaba, bu harika çözüm için teşekkürler ama nasıl bir görüntü düğmesinin nasıl olduğunu biliyor musunuz ays sadece metinden ziyade iptal eder? – user3381665

+0

Cevabımı güncelledi. Hey, beni çok kodladın. Eminim, kodunuzu özelleştirebilir ve işlevsel hale getirebilirsiniz. – raurora

+0

Bu adam için üzgünüm, bu Android için yeni ve ben sadece bu bir IOS uygulaması yapmak çünkü takımımın geri kalanı bırakın. – user3381665

4

.

İlk olarak, numaralı numaralı arabiriminize, NavigationController ile yaptığınız gibi, arabirim oluşturucunuza ViewController ekleyin. 'un ve None'dan başka bir tanesini simüle metrikler altında seçerek görebildiğinden emin olun.

İkincisi, viewDidLoad yılında, sadece aşağıdaki satırları ekleyin: status bar ise

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UINavigationBar *bar = [[UINavigationBar alloc] initWithFrame: frame]; 
    bar.items = @[self.navigationItem]; 
    [self.view addSubview: bar]; 
} 

olarak frame için, width ya 44.0 veya 64.0 bağlı olacak ViewController ve height aynı olacaktır görünür veya.

CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height; 
CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, navigationBarHeight); 

Ve farklı yönleri kullanım NSLayoutConstraints desteklemek isterseniz: olarak,

CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height; 
[self.view addConstraints: @[ 
    [NSLayoutConstraint constraintWithItem: self.view 
           attribute: NSLayoutAttributeLeft 
           relatedBy: NSLayoutRelationEqual 
            toItem: bar 
           attribute: NSLayoutAttributeLeft 
           multiplier: 1.0 
            constant: 0.0], 
    [NSLayoutConstraint constraintWithItem: self.view 
           attribute: NSLayoutAttributeRight 
           relatedBy: NSLayoutRelationEqual 
            toItem: bar 
           attribute: NSLayoutAttributeRight 
           multiplier: 1.0 
            constant: 0.0], 
    [NSLayoutConstraint constraintWithItem: self.view 
           attribute: NSLayoutAttributeTop 
           relatedBy: NSLayoutRelationEqual 
            toItem: bar 
           attribute: NSLayoutAttributeTop 
           multiplier: 1.0 
            constant: 0.0], 
    [NSLayoutConstraint constraintWithItem: bar 
           attribute: NSLayoutAttributeHeight 
           relatedBy: NSLayoutRelationEqual 
            toItem: nil 
           attribute: NSLayoutAttributeNotAnAttribute 
           multiplier: 1.0 
            constant: navigationBarHeight], 
          ]]; 
0

Swift 4 Versiyon

let navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: 320, height: 50)) 
    navigationBar.barTintColor = UIColor.lightGray 
    view.addSubview(navigationBar) 

    let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: nil) 
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: nil) 

    let navigationItem = UINavigationItem(title: "Title") 
    navigationItem.rightBarButtonItem = cancelButton 
    navigationItem.leftBarButtonItem = doneButton 

    navigationBar.items = [navigationItem] 
0

"viewWillAppear" ekleyerek çok dikkat Bu yöntem daha fazla kez çağrılabilir, (örneğin, bir modal görünür ....be) didDisappear örneğin kontrolör çıkan emin kaldır,

viewWillAppear:(BOOL)animated { 
if self.myNav != nil{ 
    return 
} 
self.myNav = .... 

3: beyan) bir değişken

1: önceden ayarlanmış ise

var myNav: UINavigationBar? 

2) testi), böylece yapay bir yaklaşım kullanır ...

0

"viewWillAppear" ifadesine ekleme konusunda çok dikkatli olun, çünkü bu yöntem daha fazla çağrılabilir, (örneğin bir model görüntülenir ....) bu nedenle tembel bir yaklaşım kullanın:

... didDisappear örneğin emin kaldır çıkan kontrolör olmak)

not

viewWillAppear:(BOOL)animated { 
if self.myNav != nil{ 
    return 
} 
self.myNav = .... 

3: zaten ayarlarsanız

var myNav: UINavigationBar? 

2) testi:

1) bir var bildirmek .. boyutu belirtmek doğru değil .. iOS döner, iyi çalışmıyorsa ..

İlgili konular