更改绑定到 MFMessageComposeViewController 中的发送按钮的操作

Posted

技术标签:

【中文标题】更改绑定到 MFMessageComposeViewController 中的发送按钮的操作【英文标题】:Changing the action bound to the send button in MFMessageComposeViewController 【发布时间】:2014-05-27 18:43:35 【问题描述】:

我知道这在官方上是不可能的。我不想把它发布到商店,它只是一个原型。

我试着找到按钮:

MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
messageController.messageComposeDelegate = self;

NSArray * allViewControllers = [messageController viewControllers];

for (UIViewController *viewController in allViewControllers)

    NSArray *allSubviews = [viewController.view subviews];
    NSLog(@"class name: %@", viewController.class);

    for(UIView *view in allSubviews)
    
        if([view isMemberOfClass:[UIButton class]])
        
            UIButton *button = (UIButton *)view;
            NSLog(@"title: %@", button.titleLabel.text);
        
    

但是没有任何效果,所以可以更改发送按钮吗?一种黑客行为?还是导入私有标头?

谢谢。

更新:

尝试了以下方法:

NSArray *allSubviews = [[messageController toolbar] subviews];

for(UIView *view in allSubviews)

    if ([view isKindOfClass:[UIToolbar class]])
    
        UIToolbar *navigationBar = (UIToolbar *)view;
        for(UIView *subview in navigationBar.subviews)
        
            NSLog(@"%@", [subview subviews]);
            if([subview isMemberOfClass:[UIBarButtonItem class]])
            
                UIBarButtonItem *button = (UIBarButtonItem *)view;
                NSLog(@"title: %@", button.title);
            
        

    

【问题讨论】:

【参考方案1】:

在幕后,是的,您可以欺骗发送按钮的标签。

官方不允许这样做,但对于私人用途,您可以使用 github 上提供的以下框架。 https://github.com/nst/ios-Runtime-Headers/tree/master/Frameworks/MessageUI.framework.

在你的项目中包含这个而不是默认框架。 并随心所欲地改变。

如果有任何疑问,请告诉我,我会显示代码。

【讨论】:

【参考方案2】:

我从未这样做过,但这里有一些想法可以为您指明正确的方向。

MFMailComposeViewControllerUINavigationController。 “发送”和“取消”按钮实际上位于其导航栏中。导航栏是UINavigationController's 视图的子视图,而不是属于它的任何子视图。您正在记录每个子视图的子视图,因此您永远不会真正看到导航栏,因为它是由父视图管理的。

尝试记录messageController.view 的子视图,这应该会给你导航栏。另一件事是您正在检查UIButton,而您可能想要检查UIBarButtonItem

【讨论】:

以上是关于更改绑定到 MFMessageComposeViewController 中的发送按钮的操作的主要内容,如果未能解决你的问题,请参考以下文章

KendoUI:将视图模型绑定到数据源更改

如何使用 jQuery 为所有浏览器绑定到 localStorage 更改事件?

将更改事件绑定到每个 DataTables 行中的复选框

更改绑定到 MFMessageComposeViewController 中的发送按钮的操作

如果更改事件未绑定然后反弹,则下拉选项“更改”不起作用

淘汰 'textInput' 和 'Value' 绑定没有捕捉到从 JS 所做的更改