2013-04-15 27 views
7

, Dinamik bir UIToolbar görsele düğmeler eklemek için, bazı kodu kullanın:UIToolbar'da uzunluk boyunca düğmeler nasıl dağıtılır? Benim uygulamada

[self.navigationController setToolbarHidden:NO]; 
UIImage *buttonImage1 = [UIImage imageNamed:@"1.png"]; 
UIImage *buttonImage2 = [UIImage imageNamed:@"2.png"]; 
UIImage *buttonImage3 = [UIImage imageNamed:@"3.png"]; 

UIBarButtonItem *toolButton1 = [[UIBarButtonItem alloc] initWithImage:buttonImage1 style:UIBarButtonItemStylePlain target:self action:@selector(btnSettingsClick:)]; 
UIBarButtonItem *toolButton2= [[UIBarButtonItem alloc] initWithImage:buttonImage2 style:UIBarButtonItemStylePlain target:self action:@selector(btnSettingsClick:)]; 
UIBarButtonItem *toolButton3 = [[UIBarButtonItem alloc] initWithImage:buttonImage3 style:UIBarButtonItemStylePlain target:self action:@selector(btnSettingsClick:)]; 

[self setToolbarItems:[NSArray arrayWithObjects:toolButton1, toolButton2, toolButton3, nil]]; 

Ama iyi çalışmıyor:

screenshot

ben başka ayarlamak çalışırsanız düğme stili:

toolButton1.style = UIBarButtonSystemItemFlexibleSpace; 
toolButton2.style = UIBarButtonSystemItemFlexibleSpace; 
toolButton3.style = UIBarButtonSystemItemFlexibleSpace; 

Ayrıca fakir görünüyor:

screenshot 2

Bunu nasıl düzeltebilirim?

+0

Sen kontrol etmek isteyebilirsiniz: http://stackoverflow.com/questions/8643501/change-the-width-of-an-uibarbuttonitem – mastDrinkNimbuPani

cevap

10

sistemi tarzı UIBarButtonSystemItemFlexibleSpace kullanmak ve mevcut düğmelerin her biri arasında bir tane koyun iki additonal çubuk düğme ekleyin:

[self.navigationController setToolbarHidden:NO]; 
UIImage *buttonImage1 = [UIImage imageNamed:@"1"]; 
UIImage *buttonImage2 = [UIImage imageNamed:@"2"]; 
UIImage *buttonImage3 = [UIImage imageNamed:@"3"]; 

UIBarButtonItem *toolButton1 = [[UIBarButtonItem alloc] initWithImage:buttonImage1 style:UIBarButtonItemStylePlain target:self action:@selector(btnSettingsClick:)]; 
UIBarButtonItem *toolButton2= [[UIBarButtonItem alloc] initWithImage:buttonImage2 style:UIBarButtonItemStylePlain target:self action:@selector(btnSettingsClick:)]; 
UIBarButtonItem *toolButton3 = [[UIBarButtonItem alloc] initWithImage:buttonImage3 style:UIBarButtonItemStylePlain target:self action:@selector(btnSettingsClick:)]; 

[self setToolbarItems:[NSArray arrayWithObjects: 
    toolButton1, 
    [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
    toolButton2, 
    [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
    toolButton3, 
    nil]]; 

, algılamak için tuhaf ama esnek uzay aslında ayrı bir nesne değil, bir tarzıdır diğer nesnelere başvurmak.

+1

İyi cevap, ama yan not yanlış. '@ 2x' soneki,' .png' uzantısını belirtmeksizin ya da içermeden çalışır. Aslında, eğer '.png' değilse uzantısı gerekir (' @ 2x' jpeg görüntülerini kullanmak mümkündür). – omz

+0

Doğru, soruyu ben düzenleyeceğim. – jszumski

3

Düğmelerin araç çubuğunuzun uzunluğu boyunca dağılmasını sağlamak için esnek alanları kullanmanız gerekir. Düğmelerden önce, her bir düğme arasında ve düğmelerinizden sonra esnek bir alan düğmesine sahip olmalısınız. (UIBarButtonSystemItemFlexibleSpace)

UIBarButtonItem *flexibleSpaceBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:NULL] 

Çubuğu öğeleri dizi şöyle bir şey olmalı: Burada

[self setToolbarItems:[NSArray arrayWithObjects:toolButton1, flexibleSpaceBtn1, toolButton2, flexibleSpaceBtn2, toolButton3, nil]]; 
0

Kullandığım bazı ref kodudur -

//Constants 
let imageNames : [String] = ["img1.png", ... "imgN.png"]; 

/********************************************************************************/ 
/** @fcn  spacingDemo() 
* @brief  space all toolbar items evenly across the UIToolbar on keyboard 
* 
* @param  [in] (UITextView) textView : view to attach keyboard to in response 
*/ 
/********************************************************************************/ 
func spacingDemo() { 

    //Vars 
    var barButtons : [UIBarButtonItem]; 
    var button : UIButton; 
    var img : UIImage; 

    //Init 
    keyboardToolbar = UIToolbar(); 
    barButtons  = [UIBarButtonItem](); 

    //Config 
    keyboardToolbar.barTintColor = UIColor.lightGray; /* set bkgnd color  */ 
    let flexBarButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil); 
    barButtons.append(flexBarButton);     /* size-to-fit   */ 

    for imageName in imageNames { 

     //Gen Button 
     button = UIButton(type: .custom); 
     button.setImage(UIImage(named: imageName), for: .normal); 
     button.addTarget(self, action: #selector(self.keyboardResponse), for: .touchUpInside); 
     barButtons.append(UIBarButtonItem(customView: button)); 

     //Apply Spacing 
     let flexBarButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil); 
     barButtons.append(flexBarButton);    /* size-to-fit   */ 
    } 

    //Assemble 
    keyboardToolbar.items = barButtons; 

    //Attach 
    textView.inputAccessoryView = keyboardToolbar; 

    //Cleanup 
    keyboardToolbar.sizeToFit(); 

    return; 
}