2013-09-02 33 views
9

Tôi có một UIDatePicker với các ngày tối thiểu và tối đa đã đặt. Tôi tự hỏi nếu có một cách để ẩn các hàng của các cột cho các ngày/lần mà là trước ngày tối thiểu của tôi hoặc sau ngày tối đa của tôi. Ngay bây giờ bộ chọn hiển thị mỗi ngày nhưng chỉ có tuần hiện tại có sẵn để chọn (in đậm), những gì tôi muốn là có các số nằm ngoài phạm vi của tuần nhất định được ẩn khỏi chế độ xem. điều này có thể được thực hiện với UIDatePicker được cung cấp bởi XCode hoặc tôi có phải tạo bộ chọn của riêng mình từ đầu không?xóa/ẩn các hàng bên ngoài phạm vi ngày tối thiểu/tối đa của UIDatePicker?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.formatter = [NSDateFormatter new]; 
    [self.formatter setDateFormat:@"dd:hh:mm:ss"]; 

    NSDate *now = [NSDate date]; 

    picker.minimumDate = [NSDate date]; 
    picker.maximumDate = [now dateByAddingTimeInterval:604800]; 

    [picker setDate:now animated:YES]; 
    self.counterLabel.text = [now description]; 

    self.now = [NSDate date]; 
    self.counterLabel.text = [self.formatter stringFromDate:self.now]; 

} 
+0

Tôi cũng đang tìm câu trả lời. Bạn đã tìm thấy một cái gì đó ... xin vui lòng chia sẻ – Sudhir

Trả lời

2

Sử dụng minimumDatemaximumDate API sẽ cư xử như bạn đã giải thích - vẫn hiển thị số ngày nhưng không cho phép chọn chúng. Hiện tại không có cách nào để ẩn những ngày đó nằm ngoài phạm vi được cung cấp, tuy nhiên tôi có một giải pháp cho bạn.

Thay vì sử dụng ngày tối thiểu và tối đa bằng UIDatePicker, bạn có thể tạo một mảng của tất cả các số NSDate mà bạn muốn hiển thị cho người dùng và sử dụng UIPickerView để hiển thị chúng cho người dùng. Tôi đã thực hiện chính xác điều này cho một trong các ứng dụng của riêng tôi.

self.datePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 162)]; 
self.datePicker.dataSource = self; 
self.datePicker.delegate = self; 
//... 

#pragma mark - UIPickerView Data Source and Delegate 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return [self.availableDates count]; 
} 

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component { 
    return 28; 
} 

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; 
    label.font = [UIFont systemFontOfSize:20]; 
    label.textColor = [UIColor blackColor]; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    dateFormatter.dateFormat = @"EEE, MMMM d"; 

    label.text = [dateFormatter stringFromDate:self.availableDates[row]]; 

    [label sizeToFit]; 

    return label; 
} 
Các vấn đề liên quan