UITextField触摸事件不适用于UIScrollView

时间:2015-07-17 08:21:26

标签: ios objective-c iphone uiscrollview uialertview

我有一个UITextField,当UITextField是UIScrollView的子视图时,文本字段操作不起作用。

其他方面,它工作正常, 这是我的代码..请帮助?

我正在使用此代码,因为我需要在alertview按钮点击后立即触发UIDatePicker。

- (void)viewDidLoad {
[super viewDidLoad];


UIScrollView *scroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];

[self.view addSubview:scroll];

date = [[UITextField alloc]initWithFrame:CGRectMake(80, 150, 150, 50)];
date.placeholder = @"Date";
date.delegate = self;
[date addTarget:self action:@selector(dateClicked:) forControlEvents:UIControlEventTouchDown];
[scroll addSubview:date];
 }

  - (void)dateClicked:(id)sender
    {
    NSLog(@"CLICKED");
     UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Choose Date Format" message:nil delegate:self cancelButtonTitle:@"dd/MM/YYYY" otherButtonTitles:@"MM/dd/YYYY", nil];
     [alertView show];
      }

2 个答案:

答案 0 :(得分:1)

您将UIButton设置为与UITextField相同,并设置UIButton UIControlEventTouchUpInside个事件并更新UITextField值。

- (void)viewDidLoad {
    [super viewDidLoad];
UIScrollView *scroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];

    [self.view addSubview:scroll];

    date = [[UITextField alloc]initWithFrame:CGRectMake(80, 150, 150, 50)];
    date.placeholder = @"Date";
    UIButton *btn=[[UIButton alloc]initWithFrame:CGRectMake(80, 150, 150, 50)];
    [btn addTarget:self action:@selector(dateClicked:) forControlEvents:UIControlEventTouchUpInside];
    [scroll addSubview:date];
    [scroll addSubview:btn];
}
- (void)dateClicked:(id)sender
{
    NSLog(@"CLICKED");
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Choose Date Format" message:nil delegate:self cancelButtonTitle:@"dd/MM/YYYY" otherButtonTitles:@"MM/dd/YYYY", nil];
    [alertView show];
}

答案 1 :(得分:1)

我根据您的要求创建了简单的示例:

<。>文件中的

 UITextField *date;
 NSMutableArray *arrData;
<。>文件中的

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIScrollView *scroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];

    [self.view addSubview:scroll];

    date = [[UITextField alloc]initWithFrame:CGRectMake(80, 150, 150, 50)];
    date.placeholder = @"Date";
    date.delegate = self;
    [date addTarget:self action:@selector(dateClicked:) forControlEvents:UIControlEventEditingDidBegin];
    [scroll addSubview:date];

    arrData = [NSMutableArray array];
    for(int i=0;i<10;i++)
    {
         [arrData addObject:[NSString stringWithFormat:@"Object - %d",i]]
    }
}

- (void)dateClicked:(id)sender
{
    NSLog(@"CLICKED");
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Choose Date Format" message:nil delegate:self cancelButtonTitle:@"dd/MM/YYYY" otherButtonTitles:@"MM/dd/YYYY", nil];
    [alertView show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    UIPickerView *picker = [[UIPickerView alloc]initWithFrame:CGRectMake(80, 200, 150, 150)];
    picker.delegate = self;
    picker.dataSource = self;
    [self.view addSubview:picker];
}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return 5;
}
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return arrData[row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row      inComponent:(NSInteger)component
{
    date.text = arrData[row];
    [pickerView removeFromSuperview];
}