我希望UISwitch出现在Messages.app(MobileSMS.app)中的CKTranscriptConversationController中,并从类CKConversation调用方法forceMMS。它编译得很好,但是当我启动messages.app时它会崩溃。有任何想法吗?
一旦我启动Messages.app它就会崩溃,当我打开开关时,我试图调用的是http://ghostbin.com/paste/3upv6,并返回FALSE;当开关关闭时。我能够在没有方法的情况下进行实际的切换显示,但是只要我把它放在代码中就会立即崩溃应用程序。
代码:
#import <UIKit/UIKit.h>
#import <ChatKit/CKConversation.h>
@interface CKTranscriptCollectionViewController : UIViewController
@property (nonatomic, strong) UISwitch *mySwitch;
@end
%hook CKTranscriptCollectionViewController
- (void)viewDidLoad {
%orig;
self.mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, 10, 51, 31)];
[self.view addSubview:self.mySwitch];
}
-(BOOL)forceMMS {
if ([self.mySwitch isOn]){
return TRUE;
} else {
return FALSE;
}
}
%end
答案 0 :(得分:1)
如果你想要做的就是在切换开关时调用一个方法,那就在交换机上添加一个目标:
[mySwitch addTarget:self action:@selector(yourMethodHere:) forControlEvents:UIControlEventValueChanged];
然后实现你的方法将switch作为一个参数,这样你就可以在切换时获得状态:
- (void)yourMethodHere:(UISwitch *)theSwitch {
NSLog(@"The switch is %@.", theSwitch.isOn ? @"on" : @"off");
}
答案 1 :(得分:0)
试试这个:
viewDidLoad中:
self.mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, 10, 51, 31)];
[self.mySwitch addTarget:self action:@selector(changeInSwitch:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.mySwitch];
- (IBAction)changeInSwitch:(id)sender
{
if ([self forceMMS)
{
NSLog(@"IN ON");
}
else
{
NSLog(@"IN OFF");
}
}
-(BOOL)forceMMS {
if ([self.mySwitch isOn]){
return TRUE;
} else {
return FALSE;
}
}