2011-01-21 31 views
5

Tôi không nhận được một cuộc gọi đến eventViewController: didCompleteWithAction: khi EKEventViewController hoàn tất việc sửa đổi một sự kiện.EKEventViewDelegate didCompleteWithAction không nhận được gọi là

Đây là cách tôi thiết lập nó:


- (void)showCalendar:(id)sender { 
    EKEventViewController *eventViewController = [[EKEventViewController alloc] init]; 

    eventViewController.delegate = self; 

    eventViewController.event = self.event; 

    // Allow event editing. 
    eventViewController.allowsEditing = YES; 

    [self.navigationController pushViewController:eventViewController animated:YES]; 
    [eventViewController release]; 
} 

tôi có các giao thức trên lớp học của tôi và phương pháp này cụ bằng cách sao chép và dán nét cao từ các tài liệu. Nó không được gọi.

Nếu tôi sử dụng EKEventEditViewController và đại biểu tương ứng của nó, thì điều đó sẽ được gọi khi sự kiện được lưu.

Tôi cũng có thể tạo lại sự cố trong mã SimpleEKDemo. Có ai biết điều gì có thể sai không?

Tôi chỉ có thể bỏ chức năng xem và đi thẳng đến EKEventEditViewController, nhưng tôi không muốn.

+0

Tôi nhận được cùng một hành vi. Các đại biểu được gọi là khi sự kiện này bị xóa, nhưng không phải khi nó được chỉnh sửa. Tôi đang đẩy EKEventViewController vào ngăn xếp bộ điều khiển chuyển hướng của tôi như một VC thông thường (tức là không bình thường). Làm thế nào bạn trình bày nó? –

+0

Như thể hiện trong đoạn mã trên. Tôi đang đẩy nó lên ngăn xếp. – Rob

Trả lời

1

trong tệp .m này, bạn cần nhập EventKit/EventKit.h và EventKitUI/EventKitUI.h và trong tệp .h bạn cần triển khai đại biểu 'EKEventViewDelegate'.

hy vọng nó giúp bạn

+0

Tôi đã có.Tuy nhiên, tôi chỉ nhận thấy rằng đại biểu đã được gọi khi tôi chấp nhận hoặc từ chối lời mời tham gia sự kiện. Tôi chỉ không được gọi nếu tôi chỉnh sửa sự kiện được tạo cục bộ từ bên trong EKEventViewController – Rob

4

Có thể hơi muộn để giúp ích, nhưng tôi cũng gặp vấn đề này.

Để có được xung quanh nó Tôi subclassed EKEventViewController, sau đó trong lớp con viewDidLoad Tôi thay thế các nút chỉnh sửa tiêu chuẩn với một trong những của riêng tôi:


- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIBarButtonItem *editItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self.delegate action:@selector(editCalEvent)]; 

    self.navigationItem.rightBarButtonItem = editItem; 
} 


Bằng cách đó khi bạn muốn chỉnh sửa sự kiện, bạn có thể thiết lập EKEventEditViewController của riêng mình và chỉ định đại biểu của mình để phản hồi thay đổi:


- (void)editCalEvent { 

    EKEventEditViewController *editController = [[EKEventEditViewController alloc] init]; 

    editController.event = editingEvent; 
    editController.eventStore = self.eventStore; 
    editController.editViewDelegate = self; 

    [self presentModalViewController:editController animated:YES]; 

    [editController release]; 

} 


Hy vọng điều đó sẽ hữu ích.

2

tôi đã có vấn đề tương tự khi tôi sử dụng "pushViewController", kết quả là nó sẽ đi đến

- (void)navigationController:(UINavigationController *)navigationController 
    willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{} 

Nhưng sau khi tôi thay đổi để presentModalViewController, nó sẽ đi đến eventViewController:didCompleteWithAction: khi Done/Hủy/Xóa là ép.

+0

Tôi đã gặp sự cố tương tự với iPad. Ban đầu đã cố gắng để đặt trong một popover phương thức và không nhận được callback. Chuyển sang sử dụng presentModalViewController và tất cả là tốt. – RunningPink

0

Điều này dường như là một thiếu sót khá rõ ràng trong thư viện. Cách giải quyết của tôi: Tôi trình bày EKEventViewController trong một UINavigationController. Tôi phát hiện hoàn thành trong phương pháp viewWillAppear của bộ điều khiển hơn đẩy EKEventViewController vào ngăn xếp xem. Sử dụng một biến boolean trong bộ điều khiển khung nhìn này để theo dõi và phân biệt sự xuất hiện ban đầu và tái xuất hiện do EKEventViewController bị xuất hiện. Có một nguy cơ rằng mã của bạn sẽ được gọi vào những lúc khác, nhưng nếu bạn chỉ làm mới các bản xem trước, vv, thì điều này là đủ.

Các vấn đề liên quan