【问题标题】:MFMessageComposeViewController - disable adding/editing of the recipients?MFMessageComposeViewController - 禁用收件人的添加/编辑?
【发布时间】:2021-07-02 11:17:51
【问题描述】:

我知道这是一个老问题,我在文档中读到我们无法自定义 MFMessageController/MFMailController 的 UI,如果他们发现我使用私有 APIS。所以现在我所做的只是为了探索私有api的

但我仍然遵循了一些文档,并尝试使用一些私有 API 来执行以下代码

@IBAction func sendSmsClick(_ sender: AnyObject) {
    guard MFMessageComposeViewController.canSendText() else {
        return
    }
    
    let messageController = MFMessageComposeViewController()
    messageController body = "fhfhfkjhfdgggefgregfhrfhfrhggejhvghjkgevhjg"
    messageController.recipients = ["64688098"]
    messageController.messageComposeDelegate = self;
    
    
    // Disabling the recepient editing - not working
    // Here the _setCanEditRecipients: is a private API
    let disableRecepients = "_setCanEditRecipients:"
    print(disableRecepients)
    let selOne = NSSelectorFromString(disableRecepients)
    if messageController.responds(to: selOne) {
        print("Yes")
       messageController.perform(selOne, with: false)
    }
    
    self.present(messageController, animated: true) {
       
    }
    
    
    
}

我从这里的 MFMessageComposeViewController 的 iVar 和方法列表中获得的私有 API。

https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/MessageUI.framework/MFMessageComposeViewController.h

但即使传递给私有 API 中的实例方法 _setCanEditRecipients 之一,我仍然可以编辑收件人列表。如何禁用 MFMessageComposer 控制器中的添加按钮和收件人编辑?任何想法将不胜感激

【问题讨论】:

    标签: ios swift iphone xcode mfmessagecomposeview


    【解决方案1】:

    尝试 1

    MFMessageComposeViewController._setCanEditRecipients() - 在将屏幕呈现给用户之前(与您尝试过的相同) - 不起作用。


    尝试 2

    MFMessageComposeViewControllerUINavigationController 子类,加载后您可以访问它的viewControllers

    self.present(messageController, animated: true, completion: {
        let firstVC = messageController.viewControllers.first
        // This is a private class called `CKSMSComposeController` 
    })
    

    CKSMSComposeController.setCanEditRecipients() - 在向用户展示屏幕后(在展示的完成处理程序中) - 不起作用。


    尝试 3

    尝试在所有其他视图之上添加一个视图 - 覆盖收件人区域并且不允许交互?

    self.present(messageController, animated: true, completion: {
        // Hard-coded frame value, needs to be tested thoroughly
        let view = UIView(frame: CGRect(x: 0, y: 70, width: messageController.view.bounds.width, height: 70))
        // Make alpha 0 after testing (added for showing what it covers)
        view.backgroundColor = UIColor.yellow.withAlphaComponent(0.3)
        view.autoresizingMask = [.flexibleWidth]
        view.isUserInteractionEnabled = false
        messageController.view.addSubview(view)
    })
    

    它从Xcode 12.5iOS 14.6 开始工作。与这些 hack 一样,修复并不可靠,可能会在任何 iOS 版本中中断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多