我有一个包含UIButton
的xib文件。我控制+拖动按钮来创建动作。必须动态设置按钮的位置。以下方法从drawRect:
方法调用,该方法更新按钮位置。
-(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
与我通过控制+拖动创建的操作断开连接(即当我在应用程序运行时单击按钮时没有任何反应)。我评论了调用此函数的部分。现在按钮开始工作,并调用了action方法。因此,将UIButton的框架断开更改为其操作方法。
编辑:为其所有超级视图启用了用户交互。我没有使用自动布局。该项目就是这样。
如何更改按钮的框架,以便在单击按钮时调用操作?
答案 0 :(得分:0)
使用超视图框检查按钮的框架。该按钮仅在其位于超视图框内时才接收触摸事件。
答案 1 :(得分: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
尝试使用我的代码并告诉我问题出在哪里?
然后我可以帮助你。
答案 2 :(得分:0)
我的按钮框架位于其父视图的框架之外。因此它无法使用。
有关详细信息,请参阅UIButton not responding after set frame within UIScrollview