2016-09-13 1 views
0

UIButtonを含むxibファイルがあります。私は+ボタンをドラッグしてアクションを作成しました。ボタンの位置は動的に設定する必要があります。下記のメソッドはボタンの位置を更新するメソッドdrawRect:から呼び出されます。UIButtonフレームを変更すると、IBActionセレクターから切断されます。

-(void)updateButtonPosition { 
    CGFloat xPos = self.label.frame.origin.x + self.label.frame.size.width; 
    CGFloat yPos = self.label.frame.origin.y + self.label.frame.size.height - 25; 
    CGRect frame = CGRectMake(xPos, yPos, self.button.frame.size.width, self.button.frame.size.height); 
    self.button.frame = frame; 
} 

しかし、私はこの関数を呼び出すと、私は(アプリが動作しているとき、私はボタンをクリックしたとき、すなわち何も起こらない)ドラッグ+コントロールによって作成されたアクションからUIButtonを切断していることに気づきました。私はこの関数が呼び出された部分をコメントしました。そして、ボタンが機能し始め、アクションメソッドが呼び出されました。フレームを変更すると、UButtonのアクションメソッドからが切断されました。

EDIT:すべてのスーパービューでユーザー対話が有効になっています。私は自動レイアウトを使用していません。プロジェクトはそうです。

ボタンをクリックしたときにアクションが呼び出されるように、ボタンのフレームを変更するにはどうすればよいですか?

+0

ボタンを前面に向けてください。 –

+0

すでに非常に前面にあります。 – Rishab

+0

あなたはそれが__disconneted__であることをどのように知っていますか?アクションは完全に削除されていますか?私はほとんどこの方法がそういうことをするとは信じていないので、あなたは詳しく教えてください。境界を更新すると、そのボタンをスーパービュー境界の外に置く可能性が高くなります。 – holex

答えて

0

スーパーフレームでボタンのフレームを確認します。このボタンは、スーパービューフレーム内にある場合にのみタッチイベントを受け取ります。

+0

すべて良いです。 – Rishab

0

問題を再現できないため、「btnAction」という名前のアクションと「btnTest」という名前のコンセントをドラッグしました。

これはViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 

- (IBAction)btnAction:(id)sender; 
@property (weak, nonatomic) IBOutlet UIButton *btnTest; 

@end 

であり、これはViewController.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

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

    [self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(grHandler)]]; 
} 

-(void)grHandler{ 
    NSLog(@"grHandler actived."); 
    [self updateButtonPosition]; 
} 

- (IBAction)btnAction:(id)sender { 
    NSLog(@"btn actived."); 
} 

-(void)updateButtonPosition { 
    CGFloat xPos = 20; 
    CGFloat yPos = 30; 
    CGRect frame = CGRectMake(xPos, yPos, self.btnTest.frame.size.width, self.btnTest.frame.size.height); 
    self.btnTest.frame = frame; 
} 

@end 

では、私のコードを使用して、問題がどこにあるかを教えてみ?

私はあなたを助けることができます。

+0

アクションメソッドは動作していますが、 'grHandler'は決して呼び出されません。それを確認できますか? – Rishab

+0

それは働いています。私はその眺めをタップする必要があった。 :D私はまだ問題が何かを知りません。ここに私のプロジェクトhttps://ufile.io/d6411 – Rishab

+0

あなたのコードファイルを取得することはできません、GitHubに置くことができますし、私はそれをダウンロードする必要はありません。 –

関連する問題