Search code examples
iosobjective-cnsdatenscalendar

disable the button


I have some 6 UILabels which will show the date like below:

                    Jan,2016 (label)
   (button)  < **27Dec 28Dec 29Dec 30Dec 31Dec 1Jan** >(Button)

Also I am having two arrow UIButton at both side when user can move to back date or previous date. And i have one lable to show the current month based on my date showing

Here is my full code:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    firstdate = [NSDate date];
    firstdate = [NSDate dateWithTimeInterval:-(5*86400) sinceDate:firstdate];
    [self dateChange];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MMM,yyyy"];  dateLabel.text = [dateFormat stringFromDate:[NSDate date]];
    dateLabel.text = [dateFormat stringFromDate: firstdate];   
}

-(void)dateChange
{
    NSArray *labelArray = @[flabel, slabel, tlabel, folabel, fivlabel,sixlabel];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    dateFormatter.dateFormat = @"ddMMM";
    for (NSInteger i = 0; i < 6; ++i) {
        NSDate *nextDate = [calendar dateByAddingUnit: NSCalendarUnitDay value:i toDate:firstdate options:nil];
        UILabel *label = (UILabel *)labelArray[i];
        label.text = [dateFormatter stringFromDate:nextDate];

        if (i==5) {
            dateFormatter.dateFormat=@"MMM,yyyy";
            dateLabel.text = [[dateFormatter stringFromDate:nextDate] capitalizedString];
        } 
    } 
}
- (IBAction)calRight:(id)sender {
    firstdate = [NSDate dateWithTimeInterval:86400 sinceDate:firstdate];
    [self dateChange];
}

- (IBAction)calLeft:(id)sender {

    firstdate = [NSDate dateWithTimeInterval:-86400 sinceDate:firstdate];
    [self dateChange];
}

So what I need in .For example like says - today is Jan 1 .so if user open my app they will seeJan 1 at last date followed by previous december date at back like I mention above .

So in that case if user on current datemeans like Jan1 means then my Rightbuttonshould be disabled. At the same time when user use left button to go november month menas then my right buttonshould be enabled

Only my rightbuttonshould be disabled when user in current date. Please help me to solve I have an idea that !

if (some condition) 
    [leftBtn setEnabled:NO];
 else
    [leftBtn setEnabled:YES];

But I am not sure about condition and code.


Solution

  • Change your method dateChange with bellow code and also btnRight is your right side button so change name whatever you have give for it.

    -(void)dateChange
    {
        NSArray *labelArray = @[flabel, slabel, tlabel, folabel, fivlabel,sixlabel];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        NSCalendar *calendar = [NSCalendar currentCalendar];
        dateFormatter.dateFormat = @"ddMMM";
        for (NSInteger i = 0; i < labelArray.count; ++i) {
    
            NSDate *nextDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:i toDate:firstdate options:nil];
            UILabel *label = (UILabel *)labelArray[i];
            label.text = [dateFormatter stringFromDate:nextDate];
    
            if (i==(labelArray.count-1)) {
                dateFormatter.dateFormat=@"MMM,yyyy";
                dateLabel.text = [[dateFormatter stringFromDate:nextDate] capitalizedString];
    
                NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
                [dateFormat setDateFormat:@"yyyy-MM-dd"];
    
                if ([[dateFormat stringFromDate:nextDate] isEqualToString:[dateFormat stringFromDate:[NSDate date]]])
                   btnRight.enabled = false; //It's the same day
                else
                   btnRight.enabled = true;
            }
        }
    }