【问题标题】:VIDEO_TOO_LONG_TITLE alert shown by UIImagePickerControllerUIImagePickerController 显示的 VIDEO_TOO_LONG_TITLE 警报
【发布时间】:2016-10-29 08:10:24
【问题描述】:

我使用UIImagePickerController 拍摄电影。通过设置控制器的videoMaximumDuration 属性来限制电影的长度。
当人们尝试拍​​摄更长的电影时,会按预期显示警报。

但是一个名为VIDEO_TOO_LONG_TITLE的意外附加警报直接显示在控件上方(见下图)。
显然这是一个 iOS 错误(仅部分本地化,未选择任何剪辑)。

是否可以隐藏这个不必要和不适当的警报?

【问题讨论】:

  • 我为此提交了一个雷达,如果你喜欢,请欺骗:29317021
  • 关于如何解决这个问题并且仍然启用“allowsEditing”的任何消息?
  • 在 iOS 10.3.1 中它仍然是一样的。
  • 有什么更新吗?在我仍然在 iOS 12.4 中面对它。如何查看雷达的当前状态?
  • 在 iOS 14 中,它仍然是一样的。也没有这方面的文档。我想为此设置一个适当的文本,但我找不到任何方法。我尝试在 Localizable.strings 和用户信息中设置它,但都没有工作。

标签: ios uiimagepickercontroller alert


【解决方案1】:
imagePicker.allowsEditing = false

【讨论】:

  • 您是对的,如果allowsEditing 设置为false,则不会显示此警报。不幸的是,我必须允许编辑。无论如何,我接受你的回答,因为在某些情况下它肯定会有所帮助!
【解决方案2】:

我知道这个问题已经很老了,但这里有一个 Apple 仍未解决的问题的解决方案。

@implementation NSBundle (UIImagePickerControllerLocalizationFix)

+ (void) load {
    SEL const selector = @selector (localizedStringForKey:value:table:);
    Method const localizedStringMethod = class_getInstanceMethod (self, selector);
    NSString *(*originalImp) (NSBundle *, SEL, NSString *, NSString *, NSString *) = (typeof (originalImp)) method_getImplementation (localizedStringMethod);
    IMP const updatedImp = (typeof (updatedImp)) imp_implementationWithBlock (^(NSBundle *bundle, NSString *key, NSString *value, NSString *tableName) {
        NSString *const result = originalImp (bundle, selector, key, value, tableName);
        if ([key isEqualToString:@"VIDEO_TOO_LONG_TITLE"] && [result isEqualToString:key]) {
            static NSBundle *properLocalizationBundle = nil;
            static NSString *properLocalizationTable = nil;
            static dispatch_once_t onceToken;
            dispatch_once (&onceToken, ^{
                NSString *const originalBundleName = bundle.infoDictionary [(NSString *) kCFBundleNameKey];
                NSArray <NSBundle *> *const frameworkBundles = [NSBundle allFrameworks];
                for (NSBundle *frameworkBundle in frameworkBundles) {
                    NSString *const possibleTableName = [originalBundleName isEqualToString:tableName] ? frameworkBundle.infoDictionary [(NSString *) kCFBundleNameKey] : tableName;
                    NSString *const localizedKey = originalImp (frameworkBundle, selector, key, value, possibleTableName);
                    if (![localizedKey isEqualToString:key]) {
                        properLocalizationBundle = frameworkBundle;
                        properLocalizationTable = possibleTableName;
                        break;
                    }
                }

                if (!(properLocalizationBundle && properLocalizationTable)) { // Giving up
                    properLocalizationBundle = bundle;
                    properLocalizationTable = tableName;
                }
            });

            return originalImp (properLocalizationBundle, selector, key, value, properLocalizationTable);
        } else {
            return result;
        }
    });
    method_setImplementation (localizedStringMethod, updatedImp);
}

@end

【讨论】:

    猜你喜欢
    • 2018-03-20
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多