omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Problems with ios15

    Pythonista
    6
    37
    5946
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • frankL
      frankL last edited by

      Specifically, it appear that the tableview delegate is not working.

      cvp 1 Reply Last reply Reply Quote 0
      • cvp
        cvp @frankL last edited by

        @frankL It is weird. I have TableView scripts with delegate and I don't see any problem with IOS 15.1

        Did you remark the delegate is not called? Which one? I only use tableview_did_select and it works

        1 Reply Last reply Reply Quote 0
        • frankL
          frankL last edited by

          This is a simple version of what I'm trying to run:

          import ui
          #
          def show_list_dialog(items=None, *args, **kwargs):
          	items = items or []
          	tbl = ui.TableView(**kwargs)
          	tbl.data_source = ui.ListDataSource(items)
          	my_sel = {'value': None}
          	class MyTableViewDelegate (object):
          		def tableview_did_select(self, tableview, section, row):
          			my_sel['value'] = tableview.data_source.items[row]
          			tableview.close()
          			tbl.delegate = MyTableViewDelegate()
          			tbl.present(style='sheet')
          			tbl.wait_modal()
          			return my_sel['value']
          #
          w, h = ui.get_screen_size()
          view = ui.View(name="Frank's Library", bg_color='lightblue', frame=(0, 0, w, h))
          
          def select_author(sender):
          	author_unique = ['Baldacci,David', 'Barr,Nevada', 'Bartol,Amy', 'Bernt,Eric', 'Brandt,Kylie', 'Bruni,Riccardo', 'Bryndza,Robert', 'Burke,James Lee', 'Burton,Mary', 'Butcher,Jim', 'Carlson,Tucker', 'Carrol,Sean', 'Case,Andrew', 'Chernov,Ron', 'Clayton,MegWaite', 'Coben,Harlan', 'Cole,Bobby', 'Connelly,Michael', 'Cornwell,Bernard', 'Cornwell,Patricia', 'Cowie,Amber', 'Crombie,Deborah', 'Crosby,Ellen', 'Cross,Katie', 'Cussler,Clive', 'Delaney,Matthew B.J.', 'Dilts,Tyler', 'Dorsey,Tim']
          	f = (0, 0, 400, 300)
          	selected_author = show_list_dialog(author_unique, frame=f, name='Select an Author')
          	author_result.text = str(selected_author)
          	return
          
          author_button = ui.Button(title='Author', frame=(10,5,350,100), border_color='black', border_width=2, background_color='#EAECEE', action=select_author, font=('Arial Rounded MT Bold',18))
          author_button.width=70
          author_button.height=40
          view.add_subview(author_button)
          #
          global author_result
          author_entry=''
          author_result = ui.TextView(name='author',frame=(100,5,250,40), border_color='black', border_width=3, text=author_entry, font=('Arial Rounded MT Bold',16))
          view.add_subview(author_result)
          
          nav_view = ui.NavigationView(view)
          nav_view.present('sheet')```
          cvp 1 Reply Last reply Reply Quote 0
          • JonB
            JonB last edited by

            Are you getting and error? Or the delegate just doesn't run?

            1 Reply Last reply Reply Quote 0
            • cvp
              cvp @frankL last edited by cvp

              @frankL I don't understand why you set these 4 lines in the delegate function..
              Moving them works

              def show_list_dialog(items=None, *args, **kwargs):
                  items = items or []
                  tbl = ui.TableView(**kwargs)
                  tbl.data_source = ui.ListDataSource(items)
                  my_sel = {'value': None}
                  class MyTableViewDelegate (object):
                      def tableview_did_select(self, tableview, section, row):
                          my_sel['value'] = tableview.data_source.items[row]
                          tableview.close()
                          #tbl.delegate = MyTableViewDelegate()
                          #tbl.present(style='sheet')
                          #tbl.wait_modal()
                          #return my_sel['value']
                  tbl.delegate = MyTableViewDelegate()
                  tbl.present(style='sheet')
                  tbl.wait_modal()
                  return my_sel['value']
              
              1 Reply Last reply Reply Quote 0
              • frankL
                frankL last edited by

                I don't get an error. It appears that the delegate just doesn't run. I removed those lines and it still doesn't work. I put a print statement into the def tableview_did_select functionn and it doesn't get executed.
                What is strange is that this same function in several other scripts also stopped working. I checked them after this script stopped working and none of them work now. That's why I thought it might have something to do with ios15. I had just upgraded to ios15 the previous night.

                cvp 2 Replies Last reply Reply Quote 0
                • cvp
                  cvp @frankL last edited by cvp

                  @frankL said

                  I removed those lines and it still doesn't work

                  Ok, you removed lines I commented but did you add the 3 lines I added (exactly the same but left indented twice)

                  1 Reply Last reply Reply Quote 0
                  • cvp
                    cvp @frankL last edited by

                    @frankL said

                    What is strange is that this same function in several other scripts also stopped working

                    If you import the same module in several scripts and if you modified (erroneously 😢) this module, it is normal that you could get the same error in these scripts.

                    1 Reply Last reply Reply Quote 0
                    • frankL
                      frankL last edited by

                      I added those three lines and now it prints the correct selection from within def tableview_did_select but it apparently returns 'none' which is what gets populated into the TextView field. Here is the exact script:

                      import ui
                      #
                      def show_list_dialog(items=None, *args, **kwargs):
                      	items = items or []
                      	tbl = ui.TableView(**kwargs)
                      	tbl.data_source = ui.ListDataSource(items)
                      	my_sel = {'value': None}
                      	class MyTableViewDelegate (object):
                      		def tableview_did_select(self, tableview, section, row):
                      			my_sel['value'] = tableview.data_source.items[row]
                      			tableview.close()
                      			print('my_sel',my_sel['value'])
                      	tbl.delegate = MyTableViewDelegate()
                      	tbl.present(style='sheet')
                      	tbl.wait_modal()
                      	return my_sel['value']
                      #
                      w, h = ui.get_screen_size()
                      view = ui.View(name="Frank's Library", bg_color='lightblue', frame=(0, 0, w, h))
                       
                      def select_author(sender):
                      	author_unique = ['Baldacci,David', 'Barr,Nevada', 'Bartol,Amy', 'Bernt,Eric', 'Brandt,Kylie', 'Bruni,Riccardo', 'Bryndza,Robert', 'Burke,James Lee', 'Burton,Mary', 'Butcher,Jim', 'Carlson,Tucker', 'Carrol,Sean', 'Case,Andrew', 'Chernov,Ron', 'Clayton,MegWaite', 'Coben,Harlan', 'Cole,Bobby', 'Connelly,Michael', 'Cornwell,Bernard', 'Cornwell,Patricia', 'Cowie,Amber', 'Crombie,Deborah', 'Crosby,Ellen', 'Cross,Katie', 'Cussler,Clive', 'Delaney,Matthew B.J.', 'Dilts,Tyler', 'Dorsey,Tim']
                      	f = (0, 0, 400, 300)
                      	selected_author = show_list_dialog(author_unique, frame=f, name='Select an Author')
                      	author_result.text = str(selected_author)
                      	return
                       
                      author_button = ui.Button(title='Author', frame=(10,5,350,100), border_color='black', border_width=2, background_color='#EAECEE', action=select_author, font=('Arial Rounded MT Bold',18))
                      author_button.width=70
                      author_button.height=40
                      view.add_subview(author_button)
                      #
                      global author_result
                      author_entry=''
                      author_result = ui.TextView(name='author',frame=(100,5,250,40), border_color='black', border_width=3, text=author_entry, font=('Arial Rounded MT Bold',16))
                      view.add_subview(author_result)
                       
                      nav_view = ui.NavigationView(view)
                      nav_view.present('sheet')
                      
                      1 Reply Last reply Reply Quote 0
                      • frankL
                        frankL last edited by

                        BTW the ios version is 15.1.1 on iPhone 12

                        cvp 1 Reply Last reply Reply Quote 0
                        • cvp
                          cvp @frankL last edited by cvp

                          @frankL For me, tapping Author, selecting one, fills the TextView and prints correctly (on a IPad 15.1) Remark that 15.1.1 is not yet for iPad

                          1 Reply Last reply Reply Quote 0
                          • frankL
                            frankL last edited by

                            I get that same thing in the console but it doesn't populate the TextView field. It doesn't appear to be passing the value of my_sel['value'] so I put the assignment line into the def tableview_did_select function and it works. This seems like a real kluge! Beware ios15.1.1

                            def show_list_dialog(items=None, *args, **kwargs):
                                items = items or []
                                tbl = ui.TableView(**kwargs)
                                tbl.data_source = ui.ListDataSource(items)
                                my_sel = {'value': None}
                                class MyTableViewDelegate (object):
                                    def tableview_did_select(self, tableview, section, row):
                                        my_sel['value'] = tableview.data_source.items[row]
                                        tableview.close()
                                        print('my_sel',my_sel['value'])
                                        author_result.text = my_sel['value']
                                tbl.delegate = MyTableViewDelegate()
                                tbl.present(style='sheet')
                                tbl.wait_modal()
                                return my_sel['value']
                            
                            cvp 1 Reply Last reply Reply Quote 0
                            • cvp
                              cvp @frankL last edited by cvp

                              @frankL why do you pass via this my_sel['value'] and not via TableView.selected_row?
                              Check here-under which lines are commented to show they are unused

                                  #my_sel = {'value': None}
                                  class MyTableViewDelegate (object):
                                      def tableview_did_select(self, tableview, section, row):
                                          #my_sel['value'] = tableview.data_source.items[row]
                                          tableview.close()
                                          #print('my_sel',my_sel['value'])
                                          #author_result.text = my_sel['value']
                                  tbl.delegate = MyTableViewDelegate()
                                  tbl.present(style='sheet')
                                  tbl.wait_modal()
                                  return tbl.data_source.items[tbl.selected_row[1]]
                                  #return my_sel['value']
                              
                              1 Reply Last reply Reply Quote 0
                              • frankL
                                frankL last edited by

                                I did that and now it returns the first item in the list (''Baldacci,David') regardless of which item is selected. Where is "selected_row" defined?

                                cvp 1 Reply Last reply Reply Quote 0
                                • cvp
                                  cvp @frankL last edited by cvp

                                  @frankL said

                                  Where is "selected_row" defined?

                                  Standard TableView process, see doc.
                                  For me, it works, even by selecting another row than 1st one.
                                  Sure, you did copy exactly?
                                  It is like you did type:

                                      return tbl.data_source.items[tbl.selected_row[0]]
                                  

                                  selected_row[0] is the section, here 0 and items[0] is Baldacci

                                  1 Reply Last reply Reply Quote 0
                                  • frankL
                                    frankL last edited by

                                    I did have it as return tbl.data_source.items[tbl.selected_row[1]] but I changed it to return tbl.data_source.items[tbl.selected_row[0]] and it still just returns the first list item ''Baldacci,David'. This is baffling.

                                    cvp 2 Replies Last reply Reply Quote 0
                                    • cvp
                                      cvp @frankL last edited by cvp

                                      @frankL said

                                      I changed it to return tbl.data_source.items[tbl.selected_row[0]]

                                      Please, don't do that, let [1] and let us try to find why you return always the 1st element

                                      Please post your full code, perhaps an indentation error in what you modified

                                      But one more time, you recreate a new TableView at each tap on the author button

                                      1 Reply Last reply Reply Quote 0
                                      • cvp
                                        cvp @frankL last edited by

                                        @frankL please try this one, shorter, without recreating each time thé TableView

                                        import ui
                                        #
                                        class MyTableViewDelegate (object):
                                          def tableview_did_select(self, tableview, section, row):
                                            author_result.text = tbl.data_source.items[row]
                                            tableview.close()
                                        
                                        w, h = ui.get_screen_size()
                                        view = ui.View(name="Frank's Library", bg_color='lightblue', frame=(0, 0, w, h))
                                        
                                        author_unique = ['Baldacci,David', 'Barr,Nevada', 'Bartol,Amy', 'Bernt,Eric', 'Brandt,Kylie', 'Bruni,Riccardo', 'Bryndza,Robert', 'Burke,James Lee', 'Burton,Mary', 'Butcher,Jim', 'Carlson,Tucker', 'Carrol,Sean', 'Case,Andrew', 'Chernov,Ron', 'Clayton,MegWaite', 'Coben,Harlan', 'Cole,Bobby', 'Connelly,Michael', 'Cornwell,Bernard', 'Cornwell,Patricia', 'Cowie,Amber', 'Crombie,Deborah', 'Crosby,Ellen', 'Cross,Katie', 'Cussler,Clive', 'Delaney,Matthew B.J.', 'Dilts,Tyler', 'Dorsey,Tim']
                                        tbl = ui.TableView()
                                        tbl.name='Select an Author'
                                        tbl.frame = (0, 0, 400, 300)
                                        tbl.data_source = ui.ListDataSource(author_unique)
                                        tbl.delegate = MyTableViewDelegate()
                                         
                                        def select_author(sender):
                                            tbl.present(style='sheet')
                                            tbl.wait_modal()
                                            return
                                         
                                        author_button = ui.Button(title='Author', frame=(10,5,350,100), border_color='black', border_width=2, background_color='#EAECEE', action=select_author, font=('Arial Rounded MT Bold',18))
                                        author_button.width=70
                                        author_button.height=40
                                        view.add_subview(author_button)
                                        #
                                        author_entry=''
                                        author_result = ui.TextView(name='author',frame=(100,5,250,40), border_color='black', border_width=3, text=author_entry, font=('Arial Rounded MT Bold',16))
                                        view.add_subview(author_result)
                                         
                                        nav_view = ui.NavigationView(view)
                                        nav_view.present('sheet')
                                        
                                        JonB 1 Reply Last reply Reply Quote 0
                                        • JonB
                                          JonB @cvp last edited by

                                          @cvp inside your delegate it should be tableview, not tbl.

                                          cvp 1 Reply Last reply Reply Quote 0
                                          • cvp
                                            cvp @JonB last edited by cvp

                                            @JonB yes, you're right, but tbl is also known, I guess, because it works

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors