我使用rubymotion和promotion框架来开发我的第一个iOS应用程序。我有一个表格视图(在导航控制器内部),点击表格单元格打开新的屏幕,其中包含加载本地html文件的Web视图。问题是Web视图仅在我第一次加载时显示。当我返回(导航控制器)并再次点击任何单元格时,它会打开新屏幕,但不会显示Web视图。 Web视图委托方法被触发,因此它加载它,但我只看到黑屏(带导航栏)。
以下是带有网络视图的屏幕的代码:
class XXXDetailScreen < ProMotion::Screen
attr_accessor :screen_title
def on_load
XXXDetailScreen.title = self.screen_title
@web_view = add_element UIWebView.alloc.initWithFrame(self.view.bounds)
@web_view.delegate = self
@web_view.scrollView.scrollEnabled = false
@web_view.scrollView.bounces = false
@web_view.loadRequest(NSURLRequest.requestWithURL(NSURL.fileURLWithPath(NSBundle.mainBundle.pathForResource('index', ofType: 'html', inDirectory: 'html'))))
end
def webView(inWeb, shouldStartLoadWithRequest: inRequest, navigationType: inType)
true
end
end
使用以下代码打开上面的屏幕:
def tableView(tableView, didSelectRowAtIndexPath: indexPath)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
open GalleryDetailScreen.new(screen_title: @data[indexPath.row][:title]), hide_tab_bar: true
end
感谢您的任何建议
答案 0 :(得分:1)
我是ProMotion的创作者之一。通常最好使用will_appear
方法来设置视图元素,因为on_load通常会过早触发以使视图正常bounds
。但是,如果您在will_appear
中加载它,则需要确保只实例化一次Web视图(每次切换到该屏幕时都会触发will_appear
)。
我将证明:
class XXXDetailScreen < ProMotion::Screen
attr_accessor :screen_title
def on_load
XXXDetailScreen.title = self.screen_title
end
def will_appear
add_element draw_web_view
end
def draw_web_view
@web_view ||= begin
v = UIWebView.alloc.initWithFrame(self.view.bounds)
v.delegate = self
v.scrollView.scrollEnabled = false
v.scrollView.bounces = false
v.loadRequest(NSURLRequest.requestWithURL(NSURL.fileURLWithPath(NSBundle.mainBundle.pathForResource('index', ofType: 'html', inDirectory: 'html'))))
v
end
end
def webView(inWeb, shouldStartLoadWithRequest: inRequest, navigationType: inType)
true
end
end
作为旁注,你真的不需要:screen_title
访问者。只需在加载时执行此操作:
open GalleryDetailScreen.new(title: @data[indexPath.row][:title]), hide_tab_bar: true