Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用Kal日历选择事件_Iphone_Uitableview_Kal - Fatal编程技术网

Iphone 使用Kal日历选择事件

Iphone 使用Kal日历选择事件,iphone,uitableview,kal,Iphone,Uitableview,Kal,我正在使用向我的应用程序添加日历视图,但在事件列表上实现didSelectRowAtIndexPath方法时遇到问题。我想在用户选择任何给定日期的事件时推送视图控制器。我曾尝试将该方法放在“KalView.m”、“KalViewController.m”和“KalDataSource.m”中,但都无法识别。调用这种方法的合适位置在哪里?我曾经遇到过类似的问题,下面是我如何实现它的 #import <MTDates/NSDate+MTDates.h> #import <Objec

我正在使用向我的应用程序添加日历视图,但在事件列表上实现didSelectRowAtIndexPath方法时遇到问题。我想在用户选择任何给定日期的事件时推送视图控制器。我曾尝试将该方法放在“KalView.m”、“KalViewController.m”和“KalDataSource.m”中,但都无法识别。调用这种方法的合适位置在哪里?

我曾经遇到过类似的问题,下面是我如何实现它的

#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移除];
}
@结束

这看起来和我的结局很相似。事实证明,我的主要问题是没有正确设置代理!:)