how to enable text input in UITextField which is i

2019-01-27 00:51发布

问题:

I am creating textField in UIActionsheet, but I can't input text, can any one has idea about it ????

my coding is as follow

-(void)commentsMethod: (id) sender {

    //setup UITextField for the UIActionSheet
    UITextField *textField    = [[UITextField alloc] initWithFrame:CGRectMake(0, 28, 320, 150)];
    //textField.delegate=self;
    textField.autocorrectionType = UITextAutocorrectionTypeNo;
    [textField setBackgroundColor:[UIColor clearColor]];
    [textField setBorderStyle:UITextBorderStyleRoundedRect];
    [textField becomeFirstResponder];

    //CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>)

    UIButton *btn = [[UIButton alloc] init];
    [btn setFrame:CGRectMake(0, 0, 100, 100)];
    [btn setTitle:@"dismiss" forState:UIControlStateNormal];
    [btn setBackgroundColor:[UIColor clearColor]];
    [btn addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside];



    UIActionSheet *myActionSheet;
    myActionSheet = [[UIActionSheet alloc] initWithTitle:@"Comments" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil, nil];
    myActionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
    [myActionSheet showInView:self.view];
    myActionSheet.userInteractionEnabled=YES;

    [myActionSheet setFrame:CGRectMake(0, 20, 320,600)]; 
    [myActionSheet insertSubview:textField atIndex:0];
    [myActionSheet insertSubview:btn atIndex:1];
    //[self.myActionSheet dismissWithClickedButtonIndex:0 animated:NO];

    //memory management
    [textField release];    
    [myActionSheet release];        
}

回答1:

Hey Veer, There is a slightly different approach that you should be taking here. Here is what I propose.

.h file code

#import <UIKit/UIKit.h>

    @interface trialViewController : UIViewController <UIActionSheetDelegate, UITextFieldDelegate> {

        UITextField *TextField;

    }

    -(void) CreateSlideOut;
    -(void) removePopUp;
    -(void) slidePopup;
    @end

.m code

#import "trialViewController.h"

@implementation trialViewController


CGRect backToOriginal;
UIView *popup;

- (void)viewDidLoad {

    [self CreateSlideOut];
    [self slidePopup];
    [super viewDidLoad];
}


-(void) CreateSlideOut
{

    CGRect frame=CGRectMake(0, CGRectGetMaxY(self.view.bounds), 320, 480);

    backToOriginal=frame;

    popup=[[UIView alloc]initWithFrame:frame];

    popup.backgroundColor = [UIColor orangeColor];

    [self.view addSubview:popup];

}


-(void) slidePopup
{

    UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame=CGRectMake(60, 190, 200,40);
    button.backgroundColor=[UIColor clearColor];

    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    [button setTitle:@"Dismiss" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(DismissClicked:) forControlEvents:UIControlEventTouchUpInside];

    TextField = [[UITextField alloc] initWithFrame:CGRectMake(20, 28, 280, 150)];
    TextField.delegate=self;
    TextField.autocorrectionType = UITextAutocorrectionTypeNo;
    [TextField setBackgroundColor:[UIColor clearColor]];
    [TextField setBorderStyle:UITextBorderStyleRoundedRect];

    [popup addSubview:TextField];
    [popup addSubview:button];

    CGRect frame=CGRectMake(0, 0, 320, 480);

    [UIView beginAnimations:nil context:nil];

    [popup setFrame:frame];

    [UIView commitAnimations];  


}

-(void) removePopUp

{   
    [UIView beginAnimations:nil context:nil];

    [popup setFrame:backToOriginal];

    [UIView commitAnimations];

    [TextField resignFirstResponder];
}

-(IBAction) DismissClicked : (id) sender
{

    [self removePopUp];
}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    NSLog(@"in textFieldShouldReturn");
    [TextField resignFirstResponder];
    return YES;
}

- (void)dealloc {
    [super dealloc];
}

@end

Use it and change the background color of the slideout. If you want I can give a codes that customize your UIButtons and create Custom colors for you to be used. Cheers



回答2:

Only key window receives keyboard notifications, so you have to add your textField into the key window.

UITextField *textField    = [[UITextField alloc] initWithFrame:CGRectMake(0, 28, 320, 150)];
// Configure your textField here:

UIWindow *appWindow = [UIApplication sharedApplication].keyWindow;
[appWindow addSubview:textField];