在"UIDatePicker"类型的对象上找不到属性"preferredDatePickerStyle" [英] Property 'preferredDatePickerStyle' not found on object of type 'UIDatePicker'

查看:251
本文介绍了在"UIDatePicker"类型的对象上找不到属性"preferredDatePickerStyle"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是react-native 0.62.2版本和datetimepicker版本3.0.1.当我尝试使用xcode构建项目时,显示以下错误:

I am using react-native 0.62.2 version and datetimepicker version 3.0.1. As I am trying to build the project with xcode, the following errors are being shown:

  1. 使用未声明的标识符'UIDatePickerStyleCompact'
  2. 使用未声明的标识符'UIDatePickerStyleWheels'
  3. 在类型的对象上找不到属性'preferredDatePickerStyle'"RNDateTimePicker *"
  4. 在类型的对象上找不到属性'preferredDatePickerStyle''UIDatePicker *'
  5. "NSInteger"(又名"long")到"id"的隐式转换是不允许使用ARC
  6. 声明需要整数类型的表达式('__strong id'无效)
  7. "UIDatePickerMode"(又名枚举")的隐式转换ARC不允许将UIDatePickerMode')更改为'id'
  8. 使用未声明的标识符'UIDatePickerStyleWheels'

以下是 RNDateTimePickerManager.h

#import "RNDateTimePickerManager.h"

#import <React/RCTBridge.h>
#import <React/RCTEventDispatcher.h>
#import "RNDateTimePicker.h"
#import <React/UIView+React.h>

@implementation RCTConvert(UIDatePicker)

RCT_ENUM_CONVERTER(UIDatePickerMode, (@{
  @"time": @(UIDatePickerModeTime),
  @"date": @(UIDatePickerModeDate),
  @"datetime": @(UIDatePickerModeDateAndTime),
}), UIDatePickerModeTime, integerValue)

RCT_ENUM_CONVERTER(UIDatePickerStyle, (@{                //Error 5
    @"default": @(UIActionSheetStyleAutomatic),
    @"compact": @(UIDatePickerStyleCompact),             //Error 1
    @"spinner": @(UIDatePickerStyleWheels),              //Error 2
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000
    @"inline": @(UIDatePickerStyleInline),
#endif
}), UIActionSheetStyleAutomatic, integerValue)

@end

@implementation RNDateTimePickerManager

RCT_EXPORT_MODULE()

- (UIView *)view
{
  return [RNDateTimePicker new];
}

+ (NSString*) datepickerStyleToString: (UIDatePickerStyle) style {
    // RCTConvert does not handle this.?
    switch (style) {                                       //Error 6
        case UIDatePickerStyleCompact:
            return @"compact";
        case UIDatePickerStyleWheels:
            return @"spinner";
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000
        case UIDatePickerStyleInline:
            return @"inline";
#endif
        default:
            [NSException raise:@"Unsupported style value" format:@"UIDatePickerStyle of %ld is unsupported", (long)style];
            return @"";
    }
}

RCT_EXPORT_METHOD(getDefaultDisplayValue:(NSDictionary *)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
    dispatch_async(dispatch_get_main_queue(), ^{
        UIDatePicker* view = [RNDateTimePicker new];
        
        view.preferredDatePickerStyle = UIActionSheetStyleAutomatic;          //Error 4
        UIDatePickerMode renderedMode = [RCTConvert UIDatePickerMode:options[@"mode"]];
        view.datePickerMode = renderedMode;
        // NOTE afaict we do not need to measure the actual dimensions here, but if we do, just look at the original PR
        
        UIDatePickerMode determinedDisplayValue = view.datePickerMode;    //Error 7

        resolve(@{
                 @"determinedDisplayValue": [RNDateTimePickerManager datepickerStyleToString:determinedDisplayValue],
                });
    });
}

RCT_EXPORT_VIEW_PROPERTY(date, NSDate)
RCT_EXPORT_VIEW_PROPERTY(locale, NSLocale)
RCT_EXPORT_VIEW_PROPERTY(minimumDate, NSDate)
RCT_EXPORT_VIEW_PROPERTY(maximumDate, NSDate)
RCT_EXPORT_VIEW_PROPERTY(minuteInterval, NSInteger)
RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock)
RCT_REMAP_VIEW_PROPERTY(mode, datePickerMode, UIDatePickerMode)
RCT_REMAP_VIEW_PROPERTY(timeZoneOffsetInMinutes, timeZone, NSTimeZone)

RCT_CUSTOM_VIEW_PROPERTY(textColor, UIColor, RNDateTimePicker)
{
    if (@available(iOS 14.0, *) && view.datePickerMode != UIDatePickerStyleWheels) {  //Error 8
    // prevents #247
    return;
  }
  if (json) {
    [view setValue:[RCTConvert UIColor:json] forKey:@"textColor"];
    [view setValue:@(NO) forKey:@"highlightsToday"];
  } else {
    UIColor* defaultColor;
    if (@available(iOS 13.0, *)) {
        defaultColor = [UIColor labelColor];
    } else {
        defaultColor = [UIColor blackColor];
    }
    [view setValue:defaultColor forKey:@"textColor"];
    [view setValue:@(YES) forKey:@"highlightsToday"];
  }
}

// TODO vonovak setting preferredDatePickerStyle invalidates minuteinterval
RCT_CUSTOM_VIEW_PROPERTY(displayIOS, UIDatePickerStyle, RNDateTimePicker)
{
    if (@available(iOS 13.4, *)) {
        if (json) {
            UIDatePickerMode propValue = [RCTConvert UIDatePickerStyle:json];
            view.preferredDatePickerStyle = propValue;           //Error 3
        } else {
            view.preferredDatePickerStyle = UIActionSheetStyleAutomatic;
        }
    }
}

@end

react-native datetimepicker中是否存在任何错误?

Is there any bug in the react-native datetimepicker?

推荐答案

对于仍然坚持此方法的人,尤其是使用

For those who are still stuck on this, specifically using this library.

从3.0.3版本开始,它要求您的Xcode至少为v11,但他们从未提及v11.3不能正常工作,这已经被很多人注意到您至少需要v11.6.

Starting from version 3.0.3, it require that your Xcode is at least v11 but they never mention that v11.3 will not work which a lot of people already noticed that you will need at least v11.6.

请介意,降级可能对您没有帮助,因为您错过了解决许多错误的更新点,例如

Mind you, downgrading might not really help you either as you're missing the point of update which addresses a lot of bugs e.g #217 fix

这篇关于在"UIDatePicker"类型的对象上找不到属性"preferredDatePickerStyle"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆