好的,我在stackoverflow找到了这个代码它很好用。但是如何通过html页面上的按钮在webview中调用它,该按钮还包含事件详细信息(日期时间位置)? Programmatically add custom event in the iPhone Calendar
#import "EventTestViewController.h"
#import <EventKit/EventKit.h>
@implementation EventTestViewController
- (void)viewDidLoad {
[super viewDidLoad];
EKEventStore *eventStore = [[EKEventStore alloc] init];
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
event.title = @"EVENT TITLE";
event.startDate = [[NSDate alloc] init];
event.endDate = [[NSDate alloc] initWithTimeInterval:600 sinceDate:event.startDate];
[event setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError *err;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
答案 0 :(得分:0)
您可以通过实现此UIWebViewDelegate方法来实现此目的:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
让您的按钮触发包含您想要从Web视图中获取的任何表单数据的POST请求,从您获取的NSURLRequest对象中提取它,执行您的代码,然后返回NO。
假设您的按钮用于提交表单(它看起来像是这样)。您需要在我提到的委托方法中捕获表单发送的请求,并解析NSURLRequest的-HTTPBody
方法的返回值,该方法将是一个包含Web视图中表单数据的字符串。
查看此处发生的事情的最佳方法是实现该方法并检查调试器中的请求对象。这应该让你开始:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"%@", [request HTTPBody]);
return NO;
}
在这里查看输出,看看请求正文是什么样的。通过一些搜索,您可能会发现一些代码可以使解析此字符串更加直接。
如果您不想从NSURLRequest获取信息,另一条路线是使用-stringByEvaluatingJavaScriptFromString:
在Web视图中执行一些javascript。如果你走这条路,你只需要知道什么时候按下按钮,然后你可以进入并使用JavaScript提取值。
另外需要注意的是,您可能希望在委托方法中添加一个检查,以确保您拦截正确的请求。一种方法是查看请求的-URL
。