更改绑定到 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】:我从未这样做过,但这里有一些想法可以为您指明正确的方向。
MFMailComposeViewController
是UINavigationController
。 “发送”和“取消”按钮实际上位于其导航栏中。导航栏是UINavigationController's
视图的子视图,而不是属于它的任何子视图。您正在记录每个子视图的子视图,因此您永远不会真正看到导航栏,因为它是由父视图管理的。
尝试记录messageController.view
的子视图,这应该会给你导航栏。另一件事是您正在检查UIButton
,而您可能想要检查UIBarButtonItem
。
【讨论】:
以上是关于更改绑定到 MFMessageComposeViewController 中的发送按钮的操作的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery 为所有浏览器绑定到 localStorage 更改事件?