【问题标题】:UITextField not working through JavaScriptCore iOS7UITextField 无法通过 JavaScriptCore iOS7 工作
【发布时间】:2014-04-27 14:09:38
【问题描述】:

我最近开始在 iOS 7 中探索 JavaSciptCore。

到目前为止,我已经能够使用 UILabel、UIButton 和其他一些使用 JSCore 的 UI 元素。

但现在我在使用 UITextField 时被卡住了。由于某种原因,它没有出现在屏幕上,但所有代码都在执行。

所以我的 .h 文件在接口中实现的协议中有以下内容。

- (void)set:(JSValue *)config; 
+ (id)create;

在我的 .m 文件中,我定义了上述函数。

+ (RZTextField *)create
{
    RZTextField *textField = [[RZTextField alloc] init];
    return textField;
}

-(void)set:(JSValue *)config
{
    if (![config[@"text"] isUndefined]) {
        self.text = [config[@"text"] toString];
    }

    if (![config[@"textColor"] isUndefined]) {
        self.textColor = [Utils makeColor:[config[@"textColor"] toArray]];
    }

    if (![config[@"frame"] isUndefined]) {
        self.frame = [Utils makeFrame:[config[@"frame"] toArray]];
        self.keyboardType = UIKeyboardTypeDefault;
        self.borderStyle = UITextBorderStyleRoundedRect;
    }

    if (![config[@"background"] isUndefined]) {
        self.background = [Utils makeColor:[config[@"background"] toArray]];
    }
}

最后这是被执行的 JS 代码:

//root view controller is created
App.rootVC = UI.ViewController.create();
App.rootVC.makeRootViewController();
App.rootVC.set({ background: [231, 76, 60, 1] });

App.textF = UI.TextField.create();
App.textF.set({
  frame:[20, 500, 300, 120],
  text: "some text",
  textColor:[255, 255, 255, 1],
  background:[255, 255, 255, 1]
});
App.rootVC.append(App.textF);

我自己做了一些调试,所以以下几点是: - 我已经设置了断点并检查了。它适用于所有函数调用。所以一切都在执行。 - 根视图控制器工作正常,我已经能够添加其他 UI 元素就好了。 - UITextField 被成功附加。我知道这一点是因为当我检查文本字段的父级时,它会返回根视图控制器的地址。 - 出于某种原因,当我从create 函数中执行initWithFrame: 时,它显示了文本字段的一部分,就好像根视图控制器是可见屏幕的一部分一样!所以无论我设置什么frame,都看不到超过一半的文本字段!

有什么想法吗?

【问题讨论】:

  • 确保您对文本字段所做的任何更改都在主线程上。我没有将此作为答案发布,因为我不确定 JSC 在哪个线程上调用方法。
  • JS 上下文正在主线程上运行。
  • 在不了解其余代码的情况下提供建议有点困难。例如,您是否在 UITextField 之后创建任何其他控件? makeRootViewController() 未显示的代码中会发生什么?
  • 您可以尝试在所有创建的控件周围添加边框,以查看是否有任何东西遮挡了 UITextField。您还可以尝试在绘制视图后设置断点,并在 UITextField 框架和图层附加到父级并渲染后检查它。
  • @Mike 好吧,我已经完成了所有这些。由于我只在视图上使用 UITextField 进行了测试,因此没有任何注意事项会掩盖它。我确实在每一行都设置了断点,但一切似乎都很好 - 适当的框架、父级等。 makeRootViewController() 简单使得 rootVC(视图控制器)作为根视图控制器。

标签: ios objective-c ios7 uitextfield javascriptcore


【解决方案1】:

我对@9​​87654324@ 有一些经验,JSTalk 的新名称是 OS X 的 JavaScriptCore 的包装。它不能在 iOS 上运行,但据我所知可以移植,所以也许你想尝试移植它。

我不确定 CocoaScript 有什么不同,或者您可能有不同的做法,但我在这段 javascript 中处理文本字段完全没有问题:https://github.com/abhibeckert/Dux/blob/master/Default-Bundles/Lorem%20Ipsum.coscript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2014-12-16
    • 2011-07-02
    • 2015-01-01
    相关资源
    最近更新 更多