2013-01-16 57 views
2

我對iOS編程相當陌生,所以這可能是一個非常簡單的錯誤。無論如何,我有一個子視圖,我想出現在「普通」視圖頂部,以便用戶可以用UIDatePicker輸入日期,並用UIBarButtonItem(它也會提示子視圖消失)在UIToolbar中確認他的選擇。問題在於控制元素(Picker和Button)不會響應輕擊和其他手勢,儘管在「正常」視圖頂部可見。我注意到,屬於「正常」視圖一部分的按鈕反而反應出來,即使這個按鈕位於子視圖下方並且不可見。這裏是產生與它的元素的子視圖代碼:iOS子視圖(UIDatePicker和UIBarButtonItem)不響應用戶輸入

UIView * newView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 0)]; 
newView.backgroundColor = [UIColor colorWithWhite:1 alpha:1]; 

UIToolbar * toolbar = [[UIToolbar alloc] initWithFrame: CGRectMake(0, 0, 320, 49)]; 
toolbar.barStyle = UIBarStyleBlack; 

UIBarButtonItem *infoButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:nil action:@selector(dismissCustom:)]; 
toolbar.items = [NSArray arrayWithObjects:infoButtonItem, nil]; 

UIDatePicker *datePicker = [[UIDatePicker alloc] init]; 
datePicker.datePickerMode = UIDatePickerModeDate; 
datePicker.hidden = NO; 
datePicker.date = [NSDate date]; 
datePicker.frame = CGRectMake(0, 49, 320, 250); 
datePicker.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
[datePicker addTarget:self action:@selector(pickerDateChanged:) forControlEvents:UIControlEventValueChanged]; 
[newView addSubview:datePicker]; 

[newView addSubview:toolbar]; 
[self.view addSubview:newView]; 

[self.view bringSubviewToFront:newView]; 

newView.tag = 1; 

的方法dismissCustom:pickerDateChanged:如下:

-(void)pickerDateChanged:(UIDatePicker *)sender 
{ 
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

    NSLog(@"Picked the date %@", [dateFormatter stringFromDate:[sender date]]); 

    dateButton.titleLabel.text = [dateFormatter stringFromDate:sender.date]; 
} 

-(void)dismissCustom:(UIBarButtonItem *)sender 
{ 
    UIView * newView = [[UIView alloc] viewWithTag:1]; 
    [newView removeFromSuperview]; 
} 

沒有任何人有一個想法是什麼錯過/錯誤?任何幫助表示讚賞! 乾杯

+1

'[[UIView的頁頭] viewWithTag:]'肯定是錯誤的。這不是你如何使用這種方法。 – 2013-01-16 18:20:35

+0

newView的高度不應爲零。它需要足夠大,包括子視圖 - 嘗試300. – Anna

+0

很多謝謝!設置newView的高度解決了問題! Cheerio! – user1984653

回答

2

至少爲按鈕,你需要添加一個touchUpInside事件的操作:

[button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside]; 
+0

但是,如果該按鈕不可見並且您想從中執行操作,則需要確保它位於頂部。 –