Iphone 使用Kal日历选择事件
我正在使用向我的应用程序添加日历视图,但在事件列表上实现didSelectRowAtIndexPath方法时遇到问题。我想在用户选择任何给定日期的事件时推送视图控制器。我曾尝试将该方法放在“KalView.m”、“KalViewController.m”和“KalDataSource.m”中,但都无法识别。调用这种方法的合适位置在哪里?我曾经遇到过类似的问题,下面是我如何实现它的Iphone 使用Kal日历选择事件,iphone,uitableview,kal,Iphone,Uitableview,Kal,我正在使用向我的应用程序添加日历视图,但在事件列表上实现didSelectRowAtIndexPath方法时遇到问题。我想在用户选择任何给定日期的事件时推送视图控制器。我曾尝试将该方法放在“KalView.m”、“KalViewController.m”和“KalDataSource.m”中,但都无法识别。调用这种方法的合适位置在哪里?我曾经遇到过类似的问题,下面是我如何实现它的 #import <MTDates/NSDate+MTDates.h> #import <Objec
#import <MTDates/NSDate+MTDates.h>
#import <ObjectiveSugar/ObjectiveSugar.h>
#import <UIImageView+WebCache.h>
#import "EventsViewController.h"
#import "EventDetailsViewController.h"
#import "EventCell.h"
#import "Event.h"
#import "KalViewController.h"
#import "CalendarViewController.h"
@implementation EventsViewController
- (id)initWithEvents:(NSArray *)_events {
self = [super init];
events = _events;
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self listUpdated];
[self addCalendarView];
}
- (void)listUpdated
{
NSMutableArray *allEvents = [NSMutableArray array];
[allEvents addObjectsFromArray:events];
NSArray *sortedArray = [allEvents sortedArrayUsingComparator:^NSComparisonResult(Event *obj1, Event *obj2) {
return [obj1.date compare:obj2.date];
}];
_allEvents = sortedArray;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [_allEvents count];
}
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//custom table cell (EventCell is a view I'm initialising my rows with)
Event *event = _allEvents[indexPath.row];
NSString *reuseIdentifier = [NSString stringWithFormat:@"Cell%@%@", event.venue.identifier, event.identifier];
EventCell *cell = (EventCell*) [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (!cell) {
cell = [EventCell createDetailedCellWithReuseIdentifier:reuseIdentifier];
cell.nameLabel.text = event.name;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
Event *event = _allEvents[indexPath.row];
EventDetailsViewController *controller = [[EventDetailsViewController alloc] initWithEvent:event];
[self.navigationController pushViewController:controller animated:YES];
}
- (void) addCalendarView{
_calenderView = [[KalViewController alloc] initWithSelectedDate:[NSDate date]];
[[self.view viewWithTag:2] addSubview:_calenderView.view]; /* depends on your requirements*/
_calenderView.view.tag = 200; /* not necessary */
[_calenderView.view setFrame:self.view.bounds];
_calenderView.dataSource = self;
_calenderView.delegate = self;
}
- (void)loadItemsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate {
//NSLog(@"%@, %@", fromDate, toDate);
// filter and pass the array to the events tableview
[self filterByDateSelected:toDate];
}
-(void)presentingDatesFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate
{
/** when selecting a different month **/
}
- (void)removeAllItems
{
NSLog(@"Items Removed");
// remove all the previous items from the tableview
}
-(void) filterByDateSelected: (NSDate *)selectedDate
{
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];
NSString *theDate = [dateFormat stringFromDate:selectedDate];
NSDate *_date = [NSDate dateFromString:theDate usingFormat:@"yyyy-MM-dd"];
// filter table by selectedDate
NSArray *_dateFilteredEvents = _allEvents;
_dateFilteredEvents = [_allEvents filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(Event *evaluatedEvent, NSDictionary *bindings) {
if ([evaluatedEvent.date isEqualToDate:_date]) {
return YES;
}
return NO;
}]];
NSLog(@"%@", _dateFilteredEvents);
// uncomment the following line if you want to display list in another controller
//[self showEventsByDate:_dateFilteredEvents];
// or else refresh table after updating the list
_allEvents = _dateFilteredEvents;
[_tableView reloadData];
}
- (void) showEventsByDate:(NSArray*)events
{
if (events.count > 0) {
CalendarViewController *_controller = [[CalendarViewController alloc] initWithEventArray:events];
[self.navigationController pushViewController:_controller animated:YES];
}
}
- (void) removeCalenderView{
[_calenderView.view removeFromSuperview];
}
@end
#导入
#进口
#进口
#导入“EventsViewController.h”
#导入“EventDetailsViewController.h”
#导入“EventCell.h”
#导入“Event.h”
#导入“KalViewController.h”
#导入“CalendarViewController.h”
@实现事件viewcontroller
-(id)initWithEvents:(NSArray*)\u事件{
self=[super init];
事件=_事件;
回归自我;
}
-(无效)viewDidLoad{
[超级视图下载];
[自我更新];
[自添加日历视图];
}
-(作废)名单更新
{
NSMutableArray*allEvents=[NSMutableArray];
[allEvents addObjectsFromArray:events];
NSArray*sortedArray=[allEvents sortedArray Using Comparator:^n比较结果(事件*obj1,事件*obj2){
返回[obj1.date比较:obj2.date];
}];
_allEvents=Darray;
}
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节{
返回[_alleventscount];
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
//自定义表格单元格(EventCell是我初始化行时使用的视图)
Event*Event=_allEvents[indexPath.row];
NSString*reuseIdentifier=[NSString stringWithFormat:@“Cell%@%@”,event.vention.identifier,event.identifier];
EventCell*cell=(EventCell*)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
如果(!单元格){
cell=[EventCell createDetailedCellWithReuseIdentifier:reuseIdentifier];
cell.namelab.text=event.name;
}
返回单元;
}
-(void)tableView:(UITableView*)tableView未选择RowatineXpath:(NSIndexPath*)indexPath{
Event*Event=_allEvents[indexPath.row];
EventDetailsViewController*控制器=[[EventDetailsViewController alloc]initWithEvent:event];
[self.navigationController pushViewController:控制器已设置动画:是];
}
-(void)添加日历视图{
_calenderView=[[KalViewController alloc]initWithSelectedDate:[NSDate日期]];
[[self.view view with tag:2]添加子视图:_calenderView.view];/*取决于您的要求*/
_calenderView.view.tag=200;/*不需要*/
[\u calenderView.view setFrame:self.view.bounds];
_calenderView.dataSource=self;
_calenderView.delegate=self;
}
-(无效)加载项从日期:(NSDate*)从日期到日期:(NSDate*)到日期{
//NSLog(@“%@,%@”,从日期到日期);
//筛选数组并将其传递给events tableview
[self FilterByDate Selected:toDate];
}
-(无效)呈现日期从:(NSDate*)从日期到:(NSDate*)到日期委托:(id)委托
{
/**选择其他月份时**/
}
-(无效)删除所有项目
{
NSLog(“删除的项目”);
//从tableview中删除以前的所有项
}
-(void)FilterByDate Selected:(NSDate*)selectedDate
{
NSDateFormatter*dateFormat=[[NSDateFormatter alloc]init];
[日期格式setDateFormat:@“yyyy-MM-dd”];
NSString*theDate=[dateFormat stringFromDate:selectedDate];
NSDate*\U date=[NSDate date FROMSTRING:使用格式的日期:@“yyyy-MM-dd”];
//按选定日期筛选表
NSArray*_dateFilteredEvents=_allEvents;
_dateFilteredEvents=[\u allEvents filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(事件*已评估事件,NSDictionary*绑定){
如果([evaluatedEvent.date isEqualToDate:\u date]){
返回YES;
}
返回否;
}]];
NSLog(@“%@”,_dateFilteredEvents);
//如果要在另一个控制器中显示列表,请取消对以下行的注释
//[自显示事件日期:_dateFilteredEvents];
//或者在更新列表后刷新表
_allEvents=\u DateFilterEvents;
[_tableView重载数据];
}
-(无效)showEventsByDate:(NSArray*)事件
{
如果(events.count>0){
CalendarViewController*_controller=[[CalendarViewController alloc]initWithEventArray:events];
[self.navigationController pushViewController:控制器已设置动画:是];
}
}
-(无效)removeCalenderView{
[[u calenderView.view从SuperView移除];
}
@结束
这看起来和我的结局很相似。事实证明,我的主要问题是没有正确设置代理!:)