2013-05-06 10 views
7

Ho un pulsante impostato in IB. Ho una configurazione di IBOutlet e l'oggetto su schermo ad esso collegato. C'è un modo per cambiare la posizione e/o la dimensione dei pulsanti in modo programmatico? So che puoi modificare il titolo e alcune cose, ma non vedo come modificarne la posizione o le dimensioni.UIButton Modifica posizione

enter image description here

Ora vorrei cambiare la posizione di conseguenza. È possibile? Se sì, per favore fammi sapere come, dal momento che sto cercando di cambiare la posizione del mio pulsante nel codice seguente, ma non funziona nel file di intestazione.

@property (nonatomic, strong) IBOutlet UIButton *mybuttonOutlet; 

Nel file di implementazione:

-(void)viewDidLoad { 


    screenSizeHeight=[UIScreen mainScreen].bounds.size.height; 


if(screenSizeHeight==568) 

    mybuttonOutlet.frame= CGRect(38, 464 ,157,25); 


if(screenSizeHeight==480) 

    mybuttonOutlet.frame= CGRect(38, 364 ,157,25); 

} 
+0

Avete collegato questo myButtonOutlet con il .xib? –

+0

Non trovo alcun motivo per cui questo non funzionerà a meno che non si sia dimenticato di connettere l'IBOutlet. – Anupdas

+0

sì, ho collegato il mio pulsante al mio .xib – casillas

risposta

14

Rimuovere Use Autolayout dal pulsante in IB o storyboard.

+0

Credo che si possa rimuovere solo l'autolayout dall'intero xib/SB stesso, il che ha funzionato anche per me. – kraftydevil

2

Se si desidera regolare le posizioni con Autolayout attivata, sarà necessario modificare il codice come questo

-(void)viewDidLayoutSubviews { 

    screenSizeHeight=[UIScreen mainScreen].bounds.size.height; 

    if(screenSizeHeight==568) 
     mybuttonOutlet.frame= CGRect(38, 464 ,157,25); 

    if(screenSizeHeight==480) 
     mybuttonOutlet.frame= CGRect(38, 364 ,157,25); 
} 

Fondamentalmente è necessario eseguire alcuna regolazione del layout personalizzato nel metodo viewDidLayoutSubviews se Autolayout è abilitato

0

Si prega di eseguire questo controllo.

-(void)viewDidLoad{ 
    if(self.mybuttonOutlet==nil)NSLog(@"Button is NIL"); 
} 

Ora, se si ottiene il registro "Button è NIL", allora probabilmente avete dimenticato di collegare il pulsante IB al mybuttonOutlet variabile.

0
#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 

@end 


#import "ViewController.h" 

@interface ViewController() 
@property(nonatomic, strong) IBOutlet UIButton *theButton; 


// -(IBAction)moveTheButton:(id)sender; 

@end 

@implementation ViewController 
@synthesize theButton; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(IBAction)moveTheButton:(id)sender{ 
    //set default position 
    CGRect btFrame = theButton.frame; 
    btFrame.origin.x = 145; 
    btFrame.origin.y = 285; 
    theButton.frame = btFrame; 

    //position changing 
    btFrame.origin.x += 40; 
    theButton.frame = btFrame; 

    //new size of button 
    CGRect rect=CGRectMake(145, 285, 190, 30); 
    [self.theButton setBounds:rect]; 

} 

@end 
0

Alla fine sono andato per i vincoli. Ottieni uno sbocco dei vincoli che determinano la posizione del pulsante (superiore, inferiore, iniziale, finale) e modifica il (i) valore (i) del/i vincolo/i.

self.constBtnSubmitTrailing.constraint = 50.0 

Questo in modo da poter mantenere AutoLayout abilitato.

0

La soluzione che ho scoperto per questo è creare un nuovo oggetto View all'interno della vista principale e inserire i miei "oggetti che cambiano dinamicamente" all'interno di quella vista (come mostrato in figura).

Object hierarchy

allora io uso Auto-Layout per posizionare la nuova vista nella principale View. Ma bugButton: UIButton che è all'interno del nuovo Vista, cambia posizione come previsto con:

bugButton.frame.origin = CGPoint(x: newX, y: newY)