【问题标题】:Scrollable <textarea> in iPhoneiPhone中的可滚动<textarea>
【发布时间】:2012-09-23 20:09:12
【问题描述】:

我使用 phoneGap 1.1.0 和 iScroll 4.1.9 来构建 iPhone 和 android 应用程序。
在 android-scroll textarea 上工作正常。
但是,在 iPhone 上,textarea 不滚动。
在我的 iPhone 3GS (iOS 5.0.1) 上,两指滚动不起作用
谁有解决办法?
谢谢。

【问题讨论】:

  • 我也会对此感兴趣。

标签: iphone mobile cordova iscroll4


【解决方案1】:

问题源于我认为您正在尝试执行的操作,并通过以下方式禁用应用的“框架”滚动到屏幕外:

document.addEventListener('touchmove', function(e) {
    e.preventDefault();
}, false);

不幸的是,我已经尝试了所有我能想到的组合,包括新的-webkit-overflow-scrolling: touch CSS 属性(无济于事)。还没找到解决办法。

【讨论】:

  • 谢谢,这实际上是我的问题。但我需要它来防止滚动文本区域的顶部或底部时整个页面滚动。
【解决方案2】:

我知道有点晚了,但我找到了解决办法:

这个问题的答案使 UIWebView 中的 UIScrollView 停止滚动: Disable Scroll on a UIWebView allowed?

我在 MainViewController.m 的 viewDidLoad 函数中添加了这段代码

for (UIView *view in webview.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
       UIScrollView *scrollView = (UIScrollView *)view;
       scrollView.scrollEnabled = NO;
    }
}

下一个问题是阻止 iScroll 处理 TextArea 上的事件,为此您需要获取 iscroll 的调试版本,以便更改代码(第 3 行):

handleEvent: function (e) {
    var that = this;
    if(e.srcElement.tagName == "TEXTAREA") return; // don't handle textarea
    switch(e.type) {
        case START_EV:
            if (!hasTouch && e.button !== 0) return;
            that._start(e);
            break;
        case MOVE_EV: that._move(e); break;
        case END_EV:
        case CANCEL_EV: that._end(e); break;
        case RESIZE_EV: that._resize(); break;
        case WHEEL_EV: that._wheel(e); break;
        case TRNEND_EV: that._transitionEnd(e); break;
    }
}

并且也不要使用类似的 if 来阻止您的 textarea 的默认值。

这个组合对我有用。

-webkit 和溢出 css 标签让它看起来更漂亮。

嗯,在 ios 4 上滚动是用两根手指而不是一根手指完成的。

【讨论】:

  • 谢谢。下次有机会我会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
相关资源
最近更新 更多