1

このボタンを動的に作成しました。データベースからのデータが作成されて入力されるため、IB を使用することはできません。ただし、IB では、@property を宣言して、後で行うことができます (サイズ変更や回転時の位置など)。私の質問は; UIInterfaceOrientation theOrientation = = self.interfaceOrientation; を使用して横向きに回転するときにサイズを変更できるように、動的に作成されたボタンにプロパティを与えるにはどうすればよいですか?

        UIButton *buttonWineries = [[UIButton alloc]initWithFrame:CGRectMake(10,yPositionWineries, 300, 160)];
        buttonWineries.layer.borderColor = [UIColor lightGrayColor].CGColor;
        buttonWineries.layer.borderWidth = 1.0;
        buttonWineries.layer.cornerRadius = 5;
        [buttonWineries setBackgroundColor:[UIColor darkGrayColor]];
        [self.wineriesMenu addSubview:buttonWineries];
        yPositionWineries += 190;
        [buttonWineries addTarget:self action:@selector(btnWineryDetails:) forControlEvents:UIControlEventTouchDown];
4

3 に答える 3

0

@property使い慣れた同じ構文を使用して、動的に作成されたビューのプロパティを宣言するために引き続き使用できます (ただし、必要に応じて を削除できIBOutletます)。これを行う代わりに、プロパティをボタンに接続するには:

UIButton *buttonWineries = [[UIButton alloc]initWithFrame:CGRectMake(10,yPositionWineries, 300, 160)];

これを行うだけです:

self.buttonWineries = [[UIButton alloc]initWithFrame:CGRectMake(10,yPositionWineries, 300, 160)];

self.buttonWineriesInterface Builder アウトレットの場合と同じように、を使用してボタンにアクセスします。

@property実際にいくつかの異なるボタンを作成している場合は、NSMutableArrayを ではなく にしたい場合がありますUIButton-addObject:各ボタンを配列に追加するために使用します。

于 2013-05-23T04:36:29.460 に答える
0

私はそれに対するより良い解決策を持っています。.h ファイルにこの行を実装することを 1 つ実行するだけです

@interface yourViewController:UIViewController 
{
   UIButton *buttonWineries;
}

このコードを .m ファイルに実装します

-(void)ViewDidLoad
{

[super viewDidLoad];

   buttonWineries = [[UIButton alloc]init];
   buttonWineries.layer.borderColor = [UIColor lightGrayColor].CGColor;
   buttonWineries.layer.borderWidth = 1.0;
   buttonWineries.layer.cornerRadius = 5;
   [buttonWineries setBackgroundColor:[UIColor darkGrayColor]];
   [self.wineriesMenu addSubview:buttonWineries];
   yPositionWineries += 190;
   [buttonWineries addTarget:self action:@selector(btnWineryDetails:) forControlEvents:UIControlEventTouchDown];

   BOOL isPortrait = UIDeviceOrientationIsPortrait(self.interfaceOrientation);
   // now do whatever you need

   if(isPortrait)
     [buttonWineriessetFrame:CGRectMake(10,yPositionWineries, 300, 160)];
   else
     [buttonWineriessetFrame:CGRectMake(//your frame size for lanscape)];

}


// check your orientation angel and change your button size inside this delegate method

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
     // Return YES for supported orientations
     if (willRotateToInterfaceOrientation == UIInterfaceOrientationPortrait) {
         if (buttonWineries) 
            [buttonWineries setFrame:CGRectMake(//put your frame size here)];
     }
     if (willRotateToInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
          if (buttonWineries)   
            [buttonWineries setFrame:CGRectMake(//put your frame size here)];

     }
}

また

サイズ変更または位置の変更中にアニメーションを停止するには、 willRotateToInterfaceOrientation の代わりに didRotateFromInterfaceOrientation を追加できます

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
     // Return YES for supported orientations
     if (willRotateToInterfaceOrientation == UIInterfaceOrientationPortrait) {
         if (buttonWineries) 
            [buttonWineries setFrame:CGRectMake(//put your frame size here)];
     }
     if (willRotateToInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
          if (buttonWineries)   
            [buttonWineries setFrame:CGRectMake(//put your frame size here)];

     }
    if (fromInterfaceOrientation == UIDeviceOrientationLandscapeRight) {
          if (buttonWineries)  
             [buttonWineries setFrame:CGRectMake(//put your frame size here)];
    }
}

お役に立てば幸いです。問題が解決しない場合はお知らせください。ありがとう

于 2013-05-23T05:00:39.297 に答える
0

フレームをセットするだけ。

buttonWineries.frame = CGRectMake(...);
于 2013-05-23T02:30:44.753 に答える