我对UIStepper有一个奇怪的问题(并伴随着UITextField) 请考虑以下代码段:
@interface LTRPageTracker : UIView <UITextFieldDelegate>
{
UIStepper* page_move;
UITextField* page_no_view;
}
-(void) nextOrPrevPage:(id)sender forEvent:(UIControlEvents) event;
@implementation LTRPageTracker
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
CGRect stepperFrame, pageNoframe;
pageNoframe.origin = frame.origin;
pageNoframe.size.height = frame.size.height;
pageNoframe.size.width = frame.size.width/2;
stepperFrame.origin.x = pageNoframe.origin.x + pageNoframe.size.width +1;
stepperFrame.origin.y = frame.origin.y;
stepperFrame.size = pageNoframe.size;
page_move = [[UIStepper alloc] initWithFrame:stepperFrame];
[page_move setMinimumValue:0];
[page_move setValue:7];
page_move.maximumValue =1000;
[page_move addTarget:self action:@selector(nextOrPrevPage:forEvent:) forControlEvents:UIControlEventValueChanged];
page_no_view = [[UITextField alloc] initWithFrame:pageNoframe];
page_no_view.delegate = self;
page_no_view.backgroundColor = [UIColor redColor];
[self addSubview:page_no_view];
[self addSubview:page_move];
[page_move sendActionsForControlEvents:UIControlEventValueChanged];
[page_move setEnabled:YES];
}
return self;
}
-(void) nextOrPrevPage:(id) sender forEvent:(UIControlEvents) event {
//assert(sender == page_move);
NSLog(@"Event is %x", event);
page_no_view.text = [[NSNumber numberWithDouble: page_move.value] stringValue];
}
我已将此视图添加到导航栏。 我可以递减UIStepper的值但不增加它(事件将不会被触发增量但会减少)。 为什么? 使用iOS 7,在模拟器上运行。
答案 0 :(得分:0)
每当你遇到UI元素没有响应的问题时,你要检查的第一件事是它(或它的一部分)是否超出其超级视图的范围(超出边界的部分不会响应)。一个简单的方法是给superview一个背景颜色。在init方法中为自己指定背景颜色,并查看显示给您的内容。我打赌您会发现步进器的右侧不在其超视图范围内,因此您需要将该视图放大,或者更改步进器在该视图中的位置。
如果您将视图的帧设置为150x30,并在视图的init方法中更改这两行,我认为它对于大到1000的数字应该可以正常工作:
pageNoframe.size.width = frame.size.width/4; // changed 2 to 4
stepperFrame.origin.x = pageNoframe.origin.x + pageNoframe.size.width+20; // changed 1 to 20