UIStepper问题:递减但不会递增

时间:2013-11-24 07:09:14

标签: ios uistepper

我对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,在模拟器上运行。

1 个答案:

答案 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