#ios #iphone #objective-c
#iOS #iPhone #objective-c
Вопрос:
Я делаю приложения с обратным отсчетом с помощью раскадровки и навигационного контроллера с 2 view controller
Контроллер «A» имеет UILABEL, показывающий, сколько дней
а контроллер «B» — это средство выбора даты с кнопкой, ниже приведен код от контроллера «B»
- (IBAction)doneSetting:(id)sender
{
//Remove the time component from the datePicker. We care only about the date
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSUInteger preservedComponents = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit);
self.datePicker.date = [calendar dateFromComponents:[calendar components:preservedComponents fromDate:self.datePicker.date]];
//Set up a timer that calls the updateTime method every second to update the label
NSTimer *timer;
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateTime)
userInfo:nil
repeats:YES];
}
-(void)updateTime
{
//Get the time left until the specified date
NSInteger ti = ((NSInteger)[self.datePicker.date timeIntervalSinceNow]);
NSInteger days = (ti / 86400);
//Update the lable with the remaining time
self.countdownLabel.text = [NSString stringWithFormat:@"i days", days];
}
как мне заставить countdownlabel.text отображаться на контроллере «A»?
Заранее спасибо
Комментарии:
1. Какова связь между контроллером «A» и контроллером «B»?
2. Вы имеете в виду отношение к раскадровке? Нет связи, я использую self.NavigationController pushViewController для переключения между обоими видами.. Или вы имеете в виду отношение к функции, контроллер «B» — это представление настроек для установки даты назначения, а контроллер «A» будет отображением количества дней до даты назначения, установленной в «B»
3. Какой контроллер нажимает на другой контроллер?
4. Контроллер «A» нажимной контроллер «B»
5. Как вы переходите от B к A? с помощью popViewController??
Ответ №1:
Попробуйте это: //======= в контроллере B ===== Объявить свойство в контроллере «B» в файле .h:
@property (nonatomic, copy) void (^LabelTextUpdated)(NSString *textValue);
и in .m из B в вашем исходном коде:
-(void)updateTime
{
//Get the time left until the specified date
NSInteger ti = ((NSInteger)[self.datePicker.date timeIntervalSinceNow]);
NSInteger days = (ti / 86400);
//Update the lable with the remaining time
self.countdownLabel.text = [NSString stringWithFormat:@"i days", days];
if (_LabelTextUpdated) {
_LabelTextUpdated(@"Value");
}
}
//========== И в контроллере «A» ===========
откуда вы нажимаете на контроллер «B», напишите это:
B *object_B = YOUR_OBJECT_OF_B;
[object_B setLabelTextUpdated:^(NSString *textValue) {
//Here you will receive updated text
NSLog(@"Your Text is %@", textValue);
}];
//Push your B controller.