Как настроить заднюю кнопку на EKEventViewcontroller
Он попробовал следующий фрагмент кода, чтобы настроить кнопку задней панели с моей собственной кнопкой. Это не имело никакого эффекта, поскольку выглядело как кнопка возврата по умолчанию.
EKEventViewController*eventView = [[EKEventViewController alloc] initWithNibName:nil bundle:nil];
eventView.event = closestEvent;
eventView.allowsEditing = NO;
UIButton* leftButton = [UIButton buttonWithType:UIButtonTypeCustom];
[leftButton setImage:[UIImage imageNamed:@"closeButton.png"] forState:UIControlStateNormal];
leftButton.frame = CGRectMake(0, 0, 25, 25);
[leftButton addTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftButton];
[self.navigationController pushViewController:eventView animated:YES];
Я также попытался поместить EKEventViewController как дочернее представление другого контроллера представления, которое я понятия не имел, как сделать это правильно. В любом случае, я бы просто хотел настроить кнопку возврата.
Обновление, я попробовал это:
eventView.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftButton];
Работает, но затем на правой стороне автоматически добавляется готовая кнопка (может быть, во время выполнения?) Я пытался обнулить правую кнопку на панели, но безрезультатно:
eventView.navigationItem.rightBarButtonItem = nil;
2 ответа
Происходит следующее: когда вы нажимаете EKEventViewController, объект выделяется, но представления еще не загружены. Решение, которое я нашел, использует API UIAppearance. Попробуйте следующий звонок.
NSDictionary *textAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
[[UIBarButtonItem appearance] setTitleTextAttributes:textAttributes forState:UIControlStateNormal];
К сожалению, это повлияет на все UIBarbuttonItems в вашем приложении, и следующий код не работает для меня. Поэтому, возможно, вам придется вручную установить другие экземпляры UIBarbuttonItem
Этот код не работает для меня
[[UIBarButtonItem appearanceWhenContainedIn:[EKEventViewController class], nil] setTitleTextAttributes:textAttributes forState:UIControlStateNormal];
Когда вы нажимаете контроллер просмотра событий, Back
По умолчанию появится кнопка с заголовком "Назад", поэтому вам не придется менять ее вручную. Однако, если вы решите изменить Back
Кнопка, вы можете сделать это, назначив новый объект типа UIBarButtonItem
к backBarButtonItem
свойство вашего элемента навигации. Например, вы можете изменить pushController:
метод, чтобы дать нашему корневому контроллеру вид Back
Кнопка, прежде чем нажать контроллер просмотра событий.
- (void)viewDidLoad
{
[super viewDidLoad];
self.eventStore = [[EKEventStore alloc]init];
NSTimeInterval nsYear = 1 * 365 * 24.0f *60.0f * 60.0f;
NSDate *startDate = [[NSDate date] dateByAddingTimeInterval:-nsYear];
NSDate *endDate = [NSDate date];
NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:self.eventStore.calendars];
NSArray *events = [self.eventStore eventsMatchingPredicate:predicate];
if ([events count]> 0)
{
EKEvent *event = [events objectAtIndex:0];
EKEventViewController *controller = [[EKEventViewController alloc]init];
controller.event = event;
controller.allowsEditing = YES;
controller.allowsCalendarPreview = YES;
controller.delegate = self;
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Go BACK OK" style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationController pushViewController:controller animated:YES];
}
}
Надеюсь, это поможет.