Проблема с 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, работающее на симуляторе.


person pbhowmick    schedule 24.11.2013    source источник


Ответы (1)


Всякий раз, когда у вас возникает проблема с тем, что элемент пользовательского интерфейса не отвечает, первое, что вы должны проверить, это то, находится ли он (или его часть) за пределами своего супервизора (часть, которая находится за пределами, не будет отвечать). Простой способ сделать это — придать супервизору фоновый цвет. В методе init назначьте себе цвет фона и посмотрите, что это вам покажет. Бьюсь об заклад, вы увидите, что правая сторона степпера не находится в его супервиде, поэтому вам нужно будет увеличить этот вид или изменить положение степпера в этом виде.

Если вы сделаете рамку представления 150x30 и измените эти две строки в методе инициализации представления, я думаю, что это должно работать нормально для числа до 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
person rdelmar    schedule 24.11.2013
comment
Хорошая идея, позвольте мне проверить. - person pbhowmick; 24.11.2013