Apakah ada cara untuk menambahkan acara iCal ke Kalender iPhone dari Aplikasi khusus?
181
Berdasarkan Dokumentasi Apple , ini telah sedikit berubah pada iOS 6.0.
1) Anda harus meminta akses ke kalender pengguna melalui "requestAccessToEntityType: completion:" dan jalankan penanganan acara di dalam blok.
2) Anda perlu mengkomit acara Anda sekarang atau meneruskan param "komit" ke save / remove call Anda
Segala sesuatu yang lain tetap sama ...
Tambahkan kerangka EventKit dan #import <EventKit/EventKit.h>
ke kode Anda.
Dalam contoh saya, saya memiliki properti instance NSString * SavedEventId.
Untuk menambahkan acara:
EKEventStore *store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted) { return; }
EKEvent *event = [EKEvent eventWithEventStore:store];
event.title = @"Event Title";
event.startDate = [NSDate date]; //today
event.endDate = [event.startDate dateByAddingTimeInterval:60*60]; //set 1 hour meeting
event.calendar = [store defaultCalendarForNewEvents];
NSError *err = nil;
[store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
self.savedEventId = event.eventIdentifier; //save the event id if you want to access this later
}];
Hapus acara:
EKEventStore* store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted) { return; }
EKEvent* eventToRemove = [store eventWithIdentifier:self.savedEventId];
if (eventToRemove) {
NSError* error = nil;
[store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error];
}
}];
Ini menambahkan acara ke kalender default Anda, jika Anda memiliki beberapa kalender maka Anda akan mengetahui yang mana
Versi cepat
Anda perlu mengimpor kerangka kerja EventKit
import EventKit
Tambahkan acara
let store = EKEventStore()
store.requestAccessToEntityType(.Event) {(granted, error) in
if !granted { return }
var event = EKEvent(eventStore: store)
event.title = "Event Title"
event.startDate = NSDate() //today
event.endDate = event.startDate.dateByAddingTimeInterval(60*60) //1 hour long meeting
event.calendar = store.defaultCalendarForNewEvents
do {
try store.saveEvent(event, span: .ThisEvent, commit: true)
self.savedEventId = event.eventIdentifier //save event id to access this particular event later
} catch {
// Display error to user
}
}
Hapus acara
let store = EKEventStore()
store.requestAccessToEntityType(EKEntityTypeEvent) {(granted, error) in
if !granted { return }
let eventToRemove = store.eventWithIdentifier(self.savedEventId)
if eventToRemove != nil {
do {
try store.removeEvent(eventToRemove, span: .ThisEvent, commit: true)
} catch {
// Display error to user
}
}
}
Anda bisa melakukan ini menggunakan kerangka Event Kit di OS 4.0.
Klik kanan pada grup FrameWorks di Groups and Files Navigator di sebelah kiri jendela. Pilih 'Tambah' lalu 'FrameWorks Yang Ada' lalu 'EventKit.Framework'.
Maka Anda harus dapat menambahkan acara dengan kode seperti ini:
sumber
Ya masih belum ada API untuk ini (2.1). Tapi sepertinya di WWDC banyak orang sudah tertarik dengan fungsionalitas (termasuk saya) dan rekomendasinya adalah pergi ke situs di bawah ini dan membuat permintaan fitur untuk ini. Jika ada cukup minat, mereka mungkin akhirnya memindahkan ICal.frework ke SDK publik.
https://developer.apple.com/bugreporter/
sumber
Akses kalender sedang ditambahkan di iPhone OS 4.0 :
sumber
Anda dapat menambahkan acara menggunakan API Acara seperti yang diuraikan Tristan dan Anda juga dapat menambahkan acara Kalender Google yang muncul di kalender iOS.
menggunakan Google API Objective-C Client Google
sumber
Implementasi Swift 4.0:
gunakan impor di bagian atas halaman oleh
import EventKit
kemudian
sumber
Perbarui untuk swift 4 untuk jawaban Dashrath
juga jangan lupa menambahkan izin untuk penggunaan kalender
sumber
Kode kerja di Swift-4.2
Sekarang kita akan mendapatkan layar acara dan di sini Anda juga dapat mengubah pengaturan Anda:
Sekarang tambahkan metode delegasi untuk menangani Batal dan menambahkan aksi tombol layar acara acara:
Catatan: Jangan lupa menambahkan kunci NSCalendarsUsageDescription ke info plist.
sumber
Ingatlah untuk mengatur endDate ke acara yang dibuat, itu wajib.
Kalau tidak, ia akan gagal (hampir tanpa suara) dengan kesalahan ini:
Kode kerja lengkap untuk saya adalah:
sumber
Gagasan Google bagus, tetapi memiliki masalah.
Saya dapat berhasil membuka layar acara kalender Google - tetapi hanya pada versi desktop utama, dan itu tidak ditampilkan dengan benar di iPhone Safari. Kalender seluler Google, yang ditampilkan dengan benar di Safari, tampaknya tidak berfungsi dengan API untuk menambah acara.
Untuk saat ini, saya tidak bisa melihat jalan keluar yang bagus untuk ini.
sumber
Sederhana .... gunakan perpustakaan tapku .... Anda dapat google kata itu dan menggunakannya ... open source ... nikmati ..... tidak perlu mengganggu dengan kode-kode itu ....
sumber