【问题标题】:How can I make my UISwitch call method (I'm using theos)如何使我的 UISwitch 调用方法(我正在使用 theos)
【发布时间】:2014-10-28 17:46:07
【问题描述】:

我希望 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

【问题讨论】:

  • 也粘贴崩溃信息
  • 它对我来说完美编译,但应用程序崩溃
  • @raki 我没有崩溃消息我正在使用 theos

标签: ios objective-c iphone uiswitch theos


【解决方案1】:

如果您只想在切换开关时调用一个方法,请向开关添加一个目标

[mySwitch addTarget:self action:@selector(yourMethodHere:) forControlEvents:UIControlEventValueChanged];

然后实现你的方法,将开关作为参数,这样你就可以在切换时获得状态:

- (void)yourMethodHere:(UISwitch *)theSwitch {
    NSLog(@"The switch is %@.", theSwitch.isOn ? @"on" : @"off");
}

【讨论】:

  • 我编译了这段代码并启动了messages.app,它仍然崩溃。
  • 好吧,你需要提供一些信息,因为我完全不知道问题可能是什么。正如我在另一条评论中提到的,我什至无法编译该代码。
  • 它在哪里崩溃?什么时候崩溃?什么是堆栈跟踪?有什么例外?
  • ghostbin.com/paste/tnoyq 我把你所说的放在代码中,它编译但仍然使应用程序崩溃,是的,我只是想在按下开关时调用一个方法。谢谢 - Brandon Salgado 58 秒前编辑
  • 再一次......它在哪里崩溃?什么时候崩溃?什么是堆栈跟踪?有什么例外?
【解决方案2】:

试试这个:

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;
    }
   }       

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 2012-08-16
相关资源
最近更新 更多