Как настроить заднюю кнопку на 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];

    }

}

Надеюсь, это поможет.

Другие вопросы по тегам