UITextField will not become first responder when touched, none of the usual mistakes apply

311 Views Asked by At

I have a UITextField that will not become the first responder when tapped. I can assign it to become first responder, which works find. But if it resigns first responder status and I try and tap it or tab back to it to make it become the first responder again, nothing happens. It appears as if the touch is being trapped somewhere, and yet I can't find anything in my code that could be causing that to happen. I've checked the usual suspects:

  1. If the textfield the top view
  2. is the textfield within the bounds of it's superview
  3. is the textfield userEnabled.

I've also rewritten the code in several different ways, to no avail.

Can anyone help me with this problem. The textField at issue is the field titled answerTextField in the method createOneDoubleViewAtOrigin.

The relevant code is below.

-(instancetype)initForProblem:(NSString *)problem{
NSLog(@"%@ '%@'",self.class, NSStringFromSelector(_cmd));

self = [super init];

if (self) {

    [self parseBasicFractionProblem:problem];

    if (_problemType == fractDoubleWithPic) {

        NSLog(@"placed the fract views");

        UIView *firstProblemView = [self createOneDoubleViewAtOrigin:CGPointMake(26, 30) withNumerator:_numerator1 denominator:_denominator1 forViewNumber:0];

        UIView *secondProblemView = [self createOneDoubleViewAtOrigin:CGPointMake(342,30) withNumerator:_numerator2 denominator:_denominator2 forViewNumber:1];

        [self addSubview:firstProblemView];
        [self addSubview:secondProblemView];
        [self bringSubviewToFront:firstProblemView];
        [self bringSubviewToFront:secondProblemView]; 

    }
    else if (_problemType == fractDoubleNoPicAns||_problemType == fractDoubleNoPicExtendedAns  ){

    }

}

self.tag = 800;
self.backgroundColor = [UIColor redColor]; 
NSLog(@"made to end"); 
return self; 
}

-(UIView *)createOneDoubleViewAtOrigin:(CGPoint)viewOrigin withNumerator:(NSInteger)numerator denominator:(NSInteger)denominator forViewNumber:(NSInteger)viewNumber{
NSLog(@"%@ '%@'",self.class, NSStringFromSelector(_cmd));

UIView *containerView = [[UIView alloc] initWithFrame: CGRectMake(viewOrigin.x,viewOrigin.y, 310, 263)];
containerView.backgroundColor = [UIColor colorWithRed:178.0/255.0 green:222.0/255.0 blue:80.0/255.0 alpha:1.0];
containerView.layer.cornerRadius = 5.0;

UILabel *numeratorView = [self createSubview:CGRectMake(66, 23, 59, 47) text:[NSString stringWithFormat:@"%ld",(long)numerator] inView:containerView];
UILabel *divisorView = [self createSubview:CGRectMake(66, 40, 59, 47) text:@"___" inView:containerView];
UILabel *denominatorView = [self createSubview:CGRectMake(72, 82, 47, 47) text:[NSString stringWithFormat:@"%ld",(long)denominator] inView:containerView];
UILabel *equals = [self createSubview:CGRectMake(125, 50, 47, 47) text:@"=" inView:containerView];
/*
FFractSupportedTextField *answerField = [self createAnswerField:CGRectMake(173,50,82,47)];
 */

UITextField *answerTextField = [[UITextField alloc] initWithFrame:CGRectMake(173,50,82,47)];

//Inside
answerTextField.font = [UIFont fontWithName:@"Helvetica" size:30.0];
answerTextField.textAlignment = NSTextAlignmentCenter;
answerTextField.placeholder = @"?";

//border
answerTextField.layer.borderWidth = 1;
answerTextField.layer.borderColor = [[UIColor blackColor] CGColor];
answerTextField.layer.cornerRadius = 5.0;

answerTextField.userInteractionEnabled = YES;
[answerTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];


containerView.tag = 820 + 6*viewNumber;
numeratorView.tag = 821 + 6*viewNumber;
divisorView.tag = 822 + 6*viewNumber;
denominatorView.tag = 823 + 6*viewNumber;
equals.tag = 824 + 6*viewNumber;
answerTextField.tag  = 801 + viewNumber;



UIView *pictureView = [self createFractPictureForNumerator:numerator denominator:denominator number:viewNumber];
pictureView.tag = 825 + 6*viewNumber;


if (viewNumber == 0){

    _answerTextField1 = answerTextField;
    [containerView addSubview:_answerTextField1];
    [containerView bringSubviewToFront:_answerTextField1];

    _pictureView1 = pictureView;
    [containerView addSubview:_pictureView1];

    [_answerTextField1 becomeFirstResponder];

} else if (viewNumber == 1) {

    _answerTextField2 = answerTextField;
    [containerView addSubview:_answerTextField2];
    [containerView bringSubviewToFront:_answerTextField2];

    _pictureView2 = pictureView;
    [containerView addSubview:_pictureView2];

}

return containerView;
}


-(UILabel *)createSubview:(CGRect)frame text:(NSString *)text inView:(UIView *)containerView{
NSLog(@"%@ '%@'",self.class, NSStringFromSelector(_cmd));

UILabel *labelView = [[UILabel alloc] initWithFrame:frame];
labelView.font = [UIFont fontWithName:@"Helvetica" size:30.0];
labelView.textAlignment = NSTextAlignmentCenter;
labelView.text = text;

[containerView addSubview:labelView];

return labelView;
}

-(FFractSupportedTextField *)createAnswerField:(CGRect)frame{
NSLog(@"%@ '%@'",self.class, NSStringFromSelector(_cmd));

FFractSupportedTextField *fieldView = [[FFractSupportedTextField alloc] initWithFrame:frame];

//Inside
fieldView.font = [UIFont fontWithName:@"Helvetica" size:30.0];
fieldView.textAlignment = NSTextAlignmentCenter;
fieldView.placeholder = @"?";

//border
fieldView.layer.borderWidth = 1;
fieldView.layer.borderColor = [[UIColor blackColor] CGColor];
fieldView.layer.cornerRadius = 5.0;

fieldView.userInteractionEnabled = YES;

return fieldView;
}

-(UIView *)createFractPictureForNumerator:(NSInteger)numerator denominator:(NSInteger)denominator number:(NSInteger)viewNumber{
NSLog(@"%@ '%@'",self.class, NSStringFromSelector(_cmd));

NSLog(@"numerator:%ld denominator:%ld",(long)numerator,(long)denominator);

UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(33, 165, 256, 78)];
containerView.backgroundColor = [UIColor whiteColor];
containerView.layer.borderColor = [[UIColor lightGrayColor] CGColor];
containerView.layer.borderWidth = 1.0;
containerView.layer.cornerRadius = 3.0;

NSInteger smallViewCount = denominator;
if (denominator == 0) {
    smallViewCount = 1;
}

float smallWidth = 245.0/smallViewCount;

for (int n = 0; n < smallViewCount; n++) {
    NSLog(@"count %d",n);

    UILabel *smallLabel = [[UILabel alloc] initWithFrame:CGRectMake(8 + n*smallWidth, 8, smallWidth - 5, 29)];
    smallLabel.backgroundColor = [UIColor colorWithRed:195.0/255.0 green:222.0/255.0 blue:172.0/255.0 alpha:1.0];
    smallLabel.font = [UIFont fontWithName:@"Helvetica" size:17.0];
    [smallLabel setAdjustsFontSizeToFitWidth:YES];
    smallLabel.textAlignment = NSTextAlignmentCenter;
    smallLabel.layer.cornerRadius = 3.0;
    smallLabel.tag = 830+n + viewNumber*10;

    [containerView addSubview:smallLabel];
}

UILabel *largeLabel = [[UILabel alloc] initWithFrame:CGRectMake(8, 41, 240, 29)];
largeLabel.backgroundColor =  [UIColor colorWithRed:195.0/255.0 green:222.0/255.0 blue:172.0/255.0 alpha:1.0];
largeLabel.text = [NSString stringWithFormat:@"= %ld",(long)numerator];
largeLabel.textAlignment = NSTextAlignmentCenter;
largeLabel.layer.cornerRadius = 3.0;

[containerView addSubview:largeLabel];

NSLog(@"end of createFractPictFor..");
return containerView;

}
0

There are 0 best solutions below