これは私のために働きます。
- (IBAction)buttonPressed:(id)sender {
[sender setImage:[UIImage imageNamed:@"button.jpeg"] forState:UIControlStateNormal];
[sender setTitle:(@"Aww") forState:UIControlStateNormal];
}
ラベルがデッドセンターではなく右端にあることに気づきました。ラベルが間違った場所にレンダリングされている可能性はありますか?setTitleをコメントアウトすると、ボタンのタイトルが画像によってオフセットされた同じ結果が得られます。
UIImageViewをボタンに変える方法。注:これは非常に汚れているため、クラスにラップする必要があります。私は残しましたが、タップで何かをするためにコードをコメントアウトしました。表示されていないのは、xibファイルにスローされ、userenabled=trueに設定されたUIImageViewです。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(buttonPressed:)];
[[self fakeButton] addGestureRecognizer:tap];
UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 250, 25)];
label.text = @"unpressed";
label.backgroundColor = [UIColor clearColor];
[[self fakeButton] addSubview:label];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)buttonPressed:(id)sender {
// UIGestureRecognizer *gesture = (UIGestureRecognizer*)sender;
// UIImageView* temp = (UIImageView*)gesture.view;
// for (UILabel *label in temp.subviews) {
// label.text = @"pressed";
// }
// temp.image = [UIImage imageNamed:@"button.jpeg"];
//
// //if you want it to reset after a Delay
// [self performSelector:@selector(buttonUnpressed:) withObject:temp afterDelay:.2];
}
-(void)buttonUnpressed:(UIImageView*)view
{
// for (UILabel *label in view.subviews) {
// label.text = @"unpressed";
// }
// view.image = [UIImage imageNamed:@"origButton.jpeg"];
// [self performSelector:@selector(buttonUnpressed:) withObject:view afterDelay:.2];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
if (CGRectContainsPoint([[self fakeButton] frame], point))
{
//Do touch down state
NSLog(@"touchStarted");
[[self fakeButton] setImage:[UIImage imageNamed:@"button.jpeg"]];
for (UILabel *label in [[self fakeButton] subviews]) {
label.text = @"pressed";
}
}
}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touch ended");
//remove touch down state
[[self fakeButton] setImage:[UIImage imageNamed:@"origButton.jpeg"]];
for (UILabel *label in [[self fakeButton] subviews]) {
label.text = @"unpressed";
}
}
@end