如何在不使用非公共API和Apple拒绝的情况下禁用UITextView上的共享?

时间:2016-01-21 07:00:35

标签: ios objective-c uitextview

我对苹果的最新版本被拒绝,并作出以下回复。

  

您的应用使用或引用以下非公开API,即   违反App Store审核指南:

     

_share:

     

App Store中不允许使用非公共API,因为   如果这些API发生变化,它可能会导致糟糕的用户体验。

我已经在XCode中彻底搜索了我的应用程序,用于_share:方法。我正在使用它来禁用UITextView之一上的共享。

@implementation UITextViewDisableShare : UITextView

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(_share:))
        return NO;
    return [super canPerformAction:action withSender:sender];
}
@end

关于堆栈溢出有很多问题,建议使用上面的代码以编程方式禁用复制,粘贴或共享选项,例如THIS。我只需要禁用共享选项,因此我无法设置userInteractionEnabled=NO

App Store已经接受了我的一个应用程序版本,其中包含上述代码。我应该如何禁用UITextView上的共享,以免它与Apple的任何评论指南和非公共API发生冲突?

3 个答案:

答案 0 :(得分:3)

转弯(没有Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.CommandText = "Select printerName, serverName, Location from " _ & " 'LDAP://DC=huge,DC=ad,DC=hcuge,DC=ch' where objectClass='printQueue' and printerName='" & shortDefaultPrinter & "' " objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst Do Until objRecordSet.EOF PrinterLocation = objRecordSet.Fields("Location").Value MsgBox(PrinterLocation) objRecordSet.MoveNext Loop 的api):

_share

答案 1 :(得分:1)

这种担忧可能没有根据,但可能从canPerformAction返回NO:withSender:除了显而易见的选择器之外的任何事情都可能导致意外后果。例如,我们知道在UIResponderStandardEditActions中声明的方法,但我们也知道还有其他未在该标题中列出的方法,例如提示初始问题的方法;此外,可能存在iOS运行时可能执行其他通常不知道的操作的情况。

如果您不需要允许选定文本可能产生的任何其他操作(例如“复制”或“查找”),则禁止UITextField的“select:”或“selectAll:”操作会给你你想要的结果。

答案 2 :(得分:0)

迅速:

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    if action == #selector(cut(_:))
        || action == #selector(copy(_:))
        || action == #selector(select(_:))
        || action == #selector(selectAll(_:))
        || action == #selector(paste(_:))
        || action == #selector(delete(_:)) {
        return super.canPerformAction(action, withSender: sender)
    }
    return false
}
相关问题