2016-10-05 34 views
4

我有一个应用程序,其中包含加载各种从本地HTML文件加载的UIWebView的菜单。 (此代码是在WebViewController)将NSDate传递给iOS中的本地UIWebView - Objective C

//Code for the WebView 
vesperswebview.scrollView.bounces = NO; 
[[vesperswebview scrollView] setBounces:NO]; 
[(UIScrollView*)[vesperswebview.subviews objectAtIndex:0] setShowsVerticalScrollIndicator:NO]; 

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"data/html"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSString *theAbsoluteURLString = [url absoluteString]; 
NSString *queryString = @"#?manifest=Psalmody-Morning"; 
NSString *absoluteURLwithQueryString = [theAbsoluteURLString stringByAppendingString:queryString]; 
NSURL *finalURL = [NSURL URLWithString:absoluteURLwithQueryString]; 

NSURLRequest *request = [NSURLRequest requestWithURL:finalURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:(NSTimeInterval)10.0]; 
[vesperswebview loadRequest:request]; 

我也有叫FlatDate器中选择一种自定义的日期选择器:(此代码是在我的主视图控制器),它连接到一个进口FlatDatePicker开源项目我从GitHub获得。

- (void)flatDatePicker:(FlatDatePicker*)datePicker dateDidChange:(NSDate*)date { 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    NSCalendar *coptic = [[NSCalendar alloc] initWithCalendarIdentifier:@"coptic"]; 
    [dateFormatter setCalendar:coptic]; 
    [dateFormatter setDateStyle:NSDateFormatterLongStyle]; 

    if (datePicker.datePickerMode == FlatDatePickerModeDate) { 
     [dateFormatter setDateFormat:@"EEEE, MMMM, dd, yyyy"]; 
    } else if (datePicker.datePickerMode == FlatDatePickerModeDate) { 
     [dateFormatter setDateFormat:@"HH:mm:ss"]; 
    } else { 
     [dateFormatter setDateFormat:@"EEEE, MMMM, dd, yyyy HH:mm:ss"]; 
    } 
    NSString *value = [dateFormatter stringFromDate:date]; 
    self.labelDateSelected.text = value; 
} 

我的问题是,当我选择在我的主视图控制器的日期,如何可以在上述日期被保存并传递到下一个视图加载相应的JavaScript是在我的数据库日期敏感

+0

有这么多的方式来实现这一目标。 1)在WebViewController中定义一个变量dateString,并在用户选择日期并推送WebViewController时进行设置。 2)如果你总是显示两个ViewController,那么一旦用户点击DatePicker,就使用委托模式更新WebViewController。 https://developer.apple.com/library/content/documentation/General/Conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html。 –

+0

我已阅读多次链接的文档,并且我已经有几个月的这个问题了,请介意直接提供代码。你会让我的生活大声笑 –

+0

然后,我需要更多的信息,你的实施是什么。就像我说的我有几个假设你如何显示你的WebViewController,你是否允许用户先选择日期。然后你推动WebViewController并显示HTML。 –

回答

1

鉴于FlatDatePicker的样子,从中获得之日起可转换为下面的JavaScript的DateFormats

ISO日期“2015年3月25日”(国际标准)

短日期“ 2015" 年3月25日或 “2015年3月25日”

长日期 “2015年3月25日” 或 “2015年3月25日”

要转换NSDate转换成这些格式。以下是可以做到

NSDateFormatter *ISODateFormatter = [[NSDateFormatter alloc] init]; 
[ISODateFormatter setDateFormat:@"yyyy-mm-dd"]; 

NSDateFormatter *ShortDateFormatter = [[NSDateFormatter alloc] init]; 
[ShortDateFormatter setDateFormat:@"yyyy/mm/dd"]; 

NSDateFormatter *LongDateFormatter = [[NSDateFormatter alloc] init]; 
[LongDateFormatter setDateFormat:@"dd MMM yyyy"]; 

NSString *ISODate = [ISODateFormatter stringFromDate:date]; 
NSString *ShortDate = [ShortDateFormatter stringFromDate:date]; 
NSString *LongDate = [LongDateFormatter stringFromDate:date]; 

您可以保存此日期selectedDate变量。然后,你可以有一个初始化属性在UIViewController这样

@interface JSViewController() 

@property (nonatomic, strong) NSString *currentDate; 

@end 

-(instancetype)initWithDate:(NSString *)jsDate { 
    self = [super initWithNibName:NULL bundle:NULL]; 
    if (self) { 
     _currentDate = jsDate; 
    } 
    return self; 
} 

可以初始化和从其他的一个以下面的方式推出这款ViewController

JSViewController *jsVC = [[JSViewController alloc] initWithDate:ISODate]; 
[self presentViewController:jsVC animated:YES completion:nil]; 

试试这一次。如果它不起作用,请随时ping我。随意建议修改以使其更好。

1

使用stringByEvaluatingJavaScriptFromString(使用WKWebView时)来调用JavaScript函数,将设置您加载的HTML的日期(使用UIWebView时)或evaluateJavaScript:completionHandler:

如果使用塞格斯呈现从WebViewControllerViewController可以使用prepareForSegue一至另一方面日期:

- (void)prepareForSegue: (UIStoryboardSegue *)segue sender: (id)sender { 
    // Make sure your segue name in storyboard is the same as this line 
    if ([[segue identifier] isEqualToString: @"SEGUE_NAME"]) { 
     // Get reference to the WebViewController 
     WebViewController *vc = [segue destinationViewController]; 

     // Pass the date to the WebViewController 
     [vc setSelectedDate: mySuperAwesomeDate]; 
    } 
} 
相关问题