dialogs list can not be scroll down when it was present from detail_button
-
I have a dialogs list(test-1) which has items with detail_button. If you tap the row of a item, another dialogs list(test-2) will be popup. If you tap the detail_button of a item, another dialogs list(test-3) will be popup.
The problem is in iOS 11.1.2, dialogs list(test-3) can not be scroll down meanwhile dialogs list(test-1) and dialogs list(test-2) can be scroll down.
In iOS 10.x dialogs list(test-1) and dialogs list(test-2) and dialogs list(test-3) all can be scroll down.
Is it a bug with pythonista or iOS?
Any help is appreciated.
The code is below:import ui import dialogs class _new_ListDialogController(dialogs._ListDialogController): def __init__(self, title, items, multiple=False, done_button_title='Done'): self.items = items self.selected_item = None self.view = ui.TableView() self.view.name = title ds = ui.ListDataSource(items) ds.action = self.row_selected ds.accessory_action = self.accessory_action self.view.data_source = ds self.view.delegate = ds self.view.frame = (0, 0, 500, 500) def row_selected(self,ds): list_dialog(title='test-2', items=['item-2']) def accessory_action(self,ds): list_dialog(title='test-3', items=['item-3']) def list_dialog(title='', items=None, multiple=False, done_button_title='Done'): c = _new_ListDialogController(title, items,multiple,done_button_title) c.view.present('sheet') c.view.wait_modal() return c.selected_item list_dialog('test-1',items=[{'title':'item-1','accessory_type':'detail_button'}])
-
@cvp @Phuket2
Thanks for your help!
Exactly, if I comment wait_modal for dialogs list(test-3), the dialogs list(test-3) can be scroll down. Unfortunately, I want to do some refreshing job after the view is colsed.
It is weird even I do not comment wait_modal:- dialogs list(test-2) can be scroll down in iOS 10.x~11.x;
- dialogs list(test-3) can be scroll down in iOS10.x;
-
@ado, I also just ran your code on the App Store version of Pythonista on ios10.x, it worked as it should have, meaning scrolling was working on all dialogs.
So this appears to be an ios11.x problem. I will create an issue on the Pythonista git hub issue tracker.
-
@Phuket2 Not sure the problem occurs only from ios11, I think I already met it before...
But, unfortunately, not always reproductible.
-
@ado Try this
import ui import dialogs class _new_ListDialogController(dialogs._ListDialogController): def __init__(self, title, items, multiple=False, done_button_title='Done'): self.items = items self.selected_item = None self.view = ui.TableView() self.view.name = title ds = ui.ListDataSource(items) ds.action = self.row_selected ds.accessory_action = self.accessory_action self.view.data_source = ds self.view.delegate = ds self.view.frame = (0,0,500,500) def row_selected(self,ds): if self.view.name == 'test-1': list_dialog(title='test-2', items=['item-2']) elif not self.view.allows_multiple_selection: self.selected_item = self.items[ds.selected_row] self.view.close() #.......... put here your code after closing.......... return def accessory_action(self,ds): list_dialog(title='test-3', items=['item-3']) def list_dialog(title='', items=None, multiple=False, done_button_title='Done'): global n c = _new_ListDialogController(title, items,multiple, done_button_title) d = 60 c.view.frame = (n*d,n*d,500-n*d,500-n*d) # to see the title bar... n = n + 1 c.view.present('sheet') #c.view.wait_modal() return c.selected_item global n n = 0 list_dialog('test-1',items=[{'title':'item-1','accessory_type':'detail_button'}])
-
@Phuket2 @cvp
Appreciated for your help!
In view of that I want to tap rows of dialogs list(test-3) doing other thing. Hope this issue will be fixed soon.
-
I would suggest that the accessory/select actions be @ui.in_backgrounded, so that control returns to the main thread and those functions exit.
list_dialog might then need to be on_main_thread'd, not sure -- or maybe if you need the result, you would call another function...
i.edef another_function(): result=list_dialog('test-3',items=['test3']) do_something(result) @ui.in_background def accessory_action(sender) another_function() @on_main_thread def list_dialog(...
You could consider refactoring so that a callback function is called, rather than using wait_modal.
A third option, is to use navigatinviews, and push a new dialog into the nav view.I suspect there are problems when you have multiple nested wait_modals.
-
@JonB agree, that’s what I called “imbricated” in my poor English 😅
-
I found new weird:
After I tap the detail_button of a item which is belong dialogs list(test-1), dialogs list(test-3) is popup. As the description in first post, dialogs list(test-3) can not be scroll down.
But if I tap any row in dialogs list(test-3), dialogs list(test-2) is popup as expected. Then I close the dialogs list(test-2) to get back dialogs list(test-3), dialogs list(test-3) can be scroll down now.
-
I'm almost sure the problem comes from several wait_modal active together...