2

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

4

1 回答 1

0

每当您遇到 UI 元素没有响应的问题时,您首先应该检查的是它(或其中的一部分)是否超出了其父视图的范围(超出范围的部分将不会响应)。一个简单的方法是给 superview 一个背景颜色。在 init 方法中为 self 分配一个背景颜色,然后看看它会显示什么。我打赌您会看到步进器的右侧不在其超级视图内,因此您需要放大该视图,或更改步进器在该视图中的位置。

如果您将视图的框架设置为 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
于 2013-11-24T16:58:27.917 回答