objective-c - 将 kal 日历实现到选项卡栏应用程序中

标签 objective-c ios cocoa-touch calendar

<分区>

我想使用 kal 日历框架。但我不知道如何将其实现到标签栏应用程序中。当我查看如何初始化 kalViewController 的演示时,它看起来像这样。

-(void)viewDidLoad{
    KalViewController *calendar = [[KalViewController alloc] init];
    [self.navigationController pushViewController:calendar animated:YES];
}

这行得通,但它转到了另一个 View 。我希望使用 Storyboard在同一 View 中显示它。

最佳答案

我检查了 KalViewController 类。它没有 initWithCoder: 实现,如果从 nibs/storyboards 实例化则调用初始化程序。

我添加了这个以使其工作:

-(id)initWithCoder:(NSCoder *)aDecoder
{
    if ((self = [super initWithCoder:aDecoder])) {

        NSDate *date = [NSDate date];
        logic = [[KalLogic alloc] initForDate:date];
        self.initialDate = date;
        self.selectedDate = date;
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(significantTimeChangeOccurred) name:UIApplicationSignificantTimeChangeNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadData) name:KalDataSourceChangedNotification object:nil];
    }
    return self;
}

我只是将一个 UIViewController 拖到故事情节舞台上,在检查器中将它的类更改为 KalViewController,将它从标签栏 Controller 连接起来并且它起作用了。


我创建了一个示例项目:TabbedKalTest@GitHub


当然应该记住DRY:

-(void) _configureWithDate:(NSDate *)date
{
    logic = [[KalLogic alloc] initForDate:date];
    self.initialDate = date;
    self.selectedDate = date;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(significantTimeChangeOccurred) name:UIApplicationSignificantTimeChangeNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadData) name:KalDataSourceChangedNotification object:nil];
}

//called if created by nib/storyboard
-(id)initWithCoder:(NSCoder *)aDecoder
{
    if ((self = [super initWithCoder:aDecoder])) {
        [self _configureWithDate:[NSDate date]];
    }
    return self;
}

//the designated initializer for non-nib/storyboard creation
- (id)initWithSelectedDate:(NSDate *)date
{
  if ((self = [super init])) {
    [self _configureWithDate:date];
  }
  return self;
}

我在 Kal 中创建了一个分支来解决这个问题并发布了一个 pull-request .

关于objective-c - 将 kal 日历实现到选项卡栏应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13952741/

上一篇:ios - FBLoginButton 不请求权限

下一篇:iphone - 检测设备是否超出 wifi 范围

相关文章:

objective-c - 存储稍后在委托(delegate)回调中返回的参数值

ios - 在 objective-c 泛型中,我可以将类型从一个类传递到另一个类吗

ios - 根据数组数据 block datepickerdate

iphone - 在 RSA 解密中将 uint8_t 转换为 NSString

ios - 如何设置自定义 UIView 属性

ios - 如何为 uiwebview 的缩小设置动画?

iphone - 如何创建可点击的电话号码

iphone - Objective-C 子类化基础知识,如何添加自定义属性;

iphone - 如何捕获 iPhone 应用程序中的其他应用程序事件?

c++ - 用于 Objective-C 的 iostream 和 sstream