iPhone:在弹出的 DatePicker 框架中添加完成按钮 [英] iPhone: Adding a Done button within a pop up DatePicker frame
问题描述
我弹出了一个 DatePicker,其中包含以下内容.现在我试图在弹出框的顶部添加一个完成按钮.
I pop up a DatePicker with the following. Now I'm trying to add a Done button at the top of the pop up frame.
-(IBAction) contactBDayDatePicker{
NSLog(@"contactBDayDatePicker");
pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeDate;
if (self.pickerView.superview == nil){
[self.view.window addSubview: self.pickerView];
// size up the picker view to our screen and compute the start/end frame origin for our slide up animation
//
// compute the start frame
CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
NSLog(@"screenRect %@",NSStringFromCGRect(screenRect));
CGSize pickerSize = [self.pickerView sizeThatFits:CGSizeZero];
NSLog(@"pickerSize %@",NSStringFromCGSize(pickerSize));
CGRect startRect = CGRectMake(0.0,
screenRect.origin.y + screenRect.size.height,
pickerSize.width, pickerSize.height);
self.pickerView.frame = startRect;
NSLog(@"pickerView.frame %@",NSStringFromCGRect(startRect));
// compute the end frame
CGRect pickerRect = CGRectMake(0.0,
screenRect.origin.y + screenRect.size.height - pickerSize.height,
pickerSize.width,
pickerSize.height+10);
NSLog(@"pickerRect %@",NSStringFromCGRect(pickerRect));
// start the slide up animation
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
// we need to perform some post operations after the animation is complete
[UIView setAnimationDelegate:self];
self.pickerView.frame = pickerRect;
[UIView commitAnimations];
}
}
我尝试将帧大小增加 10 点(请参阅上面的 CGSize pickerSize)并认为我可以使用如下所示的内容,但是按钮拒绝显示,而且我不确定如何将按钮放置在 pickerSize 内框架本身.(顺便说一句)如果重要的话,DatePicker 和 Button 会覆盖一个滚动视图.
I have tried increasing the frame size by 10 points (see CGSize pickerSize above) and thought I could use something like the following, but the button refuses to display, plus I'm not sure how to place the button inside the pickerSize frame itself. (BTW) The DatePicker and Button are overlaying a scrollView if that matters.
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"Done" forState:UIControlStateNormal];
button.center = CGPointMake(160,240);
[button addTarget:self action:@selector(done) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview:button];
感谢您的任何想法.
推荐答案
我做过基本上完全相同的事情.我继承了 UIView.它动画和一切.这是给你的一些代码:
I've done basically the exact same thing. I subclassed UIView. It animates up and everything. Here's some code for you:
#import <UIKit/UIKit.h>
#define MyDateTimePickerHeight 260
@interface MyDateTimePicker : UIView {
}
@property (nonatomic, assign, readonly) UIDatePicker *picker;
- (void) setMode: (UIDatePickerMode) mode;
- (void) setHidden: (BOOL) hidden animated: (BOOL) animated;
- (void) addTargetForDoneButton: (id) target action: (SEL) action;
@end
#define MyDateTimePickerPickerHeight 216
#define MyDateTimePickerToolbarHeight 44
@interface MyDateTimePicker()
@property (nonatomic, assign, readwrite) UIDatePicker *picker;
@property (nonatomic, assign) CGRect originalFrame;
@property (nonatomic, assign) id doneTarget;
@property (nonatomic, assign) SEL doneSelector;
- (void) donePressed;
@end
@implementation MyDateTimePicker
@synthesize picker = _picker;
@synthesize originalFrame = _originalFrame;
@synthesize doneTarget = _doneTarget;
@synthesize doneSelector = _doneSelector;
- (id) initWithFrame: (CGRect) frame {
if ((self = [super initWithFrame: frame])) {
self.originalFrame = frame;
self.backgroundColor = [UIColor clearColor];
CGFloat width = self.bounds.size.width;
UIDatePicker *picker = [[[UIDatePicker alloc] initWithFrame: CGRectMake(0, 0, width, MyDateTimePickerPickerHeight)] autorelease];
[self addSubview: picker];
UIToolbar *toolbar = [[[UIToolbar alloc] initWithFrame: CGRectMake(0, MyDateTimePickerPickerHeight, width, MyDateTimePickerToolbarHeight)] autorelease];
toolbar.barStyle = UIBarStyleBlackOpaque;
UIBarButtonItem *doneButton = [[[UIBarButtonItem alloc] initWithTitle: @"Done" style: UIBarButtonItemStyleBordered target: self action: @selector(donePressed)] autorelease];
doneButton.width = width - 20;
toolbar.items = [NSArray arrayWithObject: doneButton];
[self addSubview: toolbar];
self.picker = picker;
}
return self;
}
- (void)dealloc {
[super dealloc];
}
- (void) setMode: (UIDatePickerMode) mode {
self.picker.datePickerMode = mode;
}
- (void) donePressed {
if (self.doneTarget) {
[self.doneTarget performSelector: self.doneSelector];
}
}
- (void) addTargetForDoneButton: (id) target action: (SEL) action {
self.doneTarget = target;
self.doneSelector = action;
}
- (void) setHidden: (BOOL) hidden animated: (BOOL) animated {
CGRect newFrame = self.originalFrame;
newFrame.origin.y += hidden ? MyDateTimePickerHeight : 0;
if (animated) {
[UIView beginAnimations: @"animateDateTimePicker" context: nil];
[UIView setAnimationDuration: MyConstantsElementAnimationLength];
[UIView setAnimationCurve: UIViewAnimationCurveEaseOut];
self.frame = newFrame;
[UIView commitAnimations];
} else {
self.frame = newFrame;
}
}
@end
这篇关于iPhone:在弹出的 DatePicker 框架中添加完成按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!