2014-11-20 15 views
7

muszę dodać przycisk "Gotowe" do mojego wyboru daty jak w tym obrazie:UIDatePicker z "zrobione" przycisk

enter image description here

To jest mój kod:

-(IBAction)chooseDate:(id)sender{ 
self.datepicker= [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; 
    self.datepicker.datePickerMode = UIDatePickerModeDate; 
    datepicker.backgroundColor = Rgb2UIColor(52, 170, 220); 

    [self.btnDone 
       addTarget:self 
       action:@selector(SetDatePickerTime:) 
       forControlEvents:UIControlEventTouchDown]; 

[self.view addSubview:self.datepicker]; 
} 
+1

Co chcesz zrobić? Jaki masz problem? – NobodyNada

+0

Muszę to zrobić http://mjstelly.files.wordpress.com/2011/08/datepicker.png?w=230&h=300 –

Odpowiedz

8

Tworzenie selektora daty, a następnie dodaj go jako widok wejściowy danego pola (self.fieldInQuestion.inputView = datePicker). Następnie utwórz obiekt UIToolBar (wysokość 44) z elementem o nazwie "Gotowe", cel własny i selektor (np. Dodaj to jako widok akcesoriów wejściowych tego samego pola, dla którego dokonano wyboru daty dla widoku wejściowego dla (self.fieldInQuestion.inputAccessoryView = UIToolbarInstance). W metodzie selektora (- (void) zrobionej w powyższym przykładzie) upewnij się, że używasz [self.fieldInQuestion resignFirstResponder], a to go odrzuci.

+0

Otrzymuję inputAccessoryView jest właściwością tylko do odczytu, gdy próbuję przypisać do niego mój pasek naitool – user1709076

+0

@ user1709076 Użyj '[fieldInQuestion setInputAccessoryView: toolbar]' –

0

I DO !!!!

-(IBAction)ChooseDate:(id)sender{ 

btnDone = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

[done setTitle:@"GO!" forState:UIControlStateNormal]; 
btnDone.backgroundColor = UIColorFromRGB(0x1F1F21); 
btnDone.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
[btnDone addTarget:self 
      action:@selector(HidePicker:) 
forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btnDone]; 


    self.datepicker= [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; 
    self.datepicker.datePickerMode = UIDatePickerModeDate; 
    datepicker.backgroundColor = Rgb2UIColor(52, 170, 220); 

    [self.view addSubview:self.datepicker]; 
} 


-(IBAction)HidePicker:(id)sender{ 
[UIView animateWithDuration:0.5 
       animations:^{ 
        datepicker.frame = CGRectMake(0, -250, 320, 50); 
       } completion:^(BOOL finished) { 
        [datepicker removeFromSuperview]; 
        [btnDone removeFromSuperview]; 
       }]; 

[self.datepicker removeFromSuperview]; 
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; 
[outputFormatter setDateFormat:@"ddMMyyyy"]; 

//NSLOG 
NSLog(@"%@",[outputFormatter stringFromDate:self.datepicker.date]); 

}

0

stworzyć UIView i dodać go do głównego widoku. Dodaj UIDatePicker do nowego UIView. Dodaj dwa UIButtons do UIView.

4

Obraz odniesienia swoje pytanie pokazuje, że aplikacja korzysta UIToolbar i będę zakładać, że gdy dotykając pola tekstowego data datepicker z przycisku Gotowe appears.And za to w pliku some.h

/*****keyboard Done button ***/ 



#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 
{ 
    IBOutlet UIDatePicker *picker1; 
    IBOutlet UITextField *txtFld; 

} 
@property (nonatomic, retain) UIToolbar *keyboardToolbar; 

@end 

w pliku some.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
picker1=[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 300)];//frames are just for demo 
[txtFld setInputView:picker1]; 
} 

- (void)keyboardWillShow:(NSNotification *)notification 
{ 
    if(keyboardToolbar == nil) { 
     keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 410, 320, 44)] ; 
     [keyboardToolbar setBarStyle:UIBarStyleBlackTranslucent]; 
     [keyboardToolbar sizeToFit]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.4]; 

     UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 

     UIBarButtonItem *doneButton1 =[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(resignKeyboard)]; 
     NSArray *itemsArray = [NSArray arrayWithObjects:flexButton,doneButton1, nil]; 

     [keyboardToolbar setItems:itemsArray]; 


     [txtFld setInputAccessoryView:keyboardToolbar]; 
     [self.view addSubview:keyboardToolbar]; 
     [UIView commitAnimations]; 
    } 
} 



-(void)resignKeyboard { 

    [keyboardToolbar removeFromSuperview]; 
    [txtFld resignFirstResponder]; 
///do nescessary date calculation here 

    } 

enter image description here

7

z Swift

// Place this code inside your ViewController or where you want ;) 

var txtField: UITextField = UITextField(frame: CGRectMake(0, 0, 200, 50)) 

// the formatter should be "compliant" to the UIDatePickerMode selected below 
var dateFormatter: NSDateFormatter { 
    let formatter = NSDateFormatter() 
    // customize the locale for the formatter if you want 
    //formatter.locale = NSLocale(localeIdentifier: "it_IT") 
    formatter.dateFormat = "dd/MM/yyyy" 
    return formatter 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // date picker setup 
    let datePickerView:UIDatePicker = UIDatePicker() 

    // choose the mode you want 
    // other options are: DateAndTime, Time, CountDownTimer 
    datePickerView.datePickerMode = UIDatePickerMode.Date 

    // choose your locale or leave the default (system) 
    //datePickerView.locale = NSLocale.init(localeIdentifier: "it_IT") 

    datePickerView.addTarget(self, action: "onDatePickerValueChanged:", forControlEvents: UIControlEvents.ValueChanged) 
    txtField.inputView = datePickerView 

    // datepicker toolbar setup 
    let toolBar = UIToolbar() 
    toolBar.barStyle = UIBarStyle.Default 
    toolBar.translucent = true 
    let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: "doneDatePickerPressed") 

    // if you remove the space element, the "done" button will be left aligned 
    // you can add more items if you want 
    toolBar.setItems([space, doneButton], animated: false) 
    toolBar.userInteractionEnabled = true 
    toolBar.sizeToFit() 

    txtField.inputAccessoryView = toolBar 

    self.view.addSubview(txtField) 
} 

func doneDatePickerPressed(){ 
    self.view.endEditing(true) 
} 

func onDatePickerValueChanged(datePicker: UIDatePicker) { 
    self.txtField = dateFormatter.stringFromDate(datePicker.date) 
} 
Powiązane problemy