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.
[Share Code] ui.TableView as a banner or something like that
-
The below is not mind blowing. But just a different way to think if you have not thought of it already. The basic idea is to use the table view as a series or an array of views. As ui.TableView subclasses ui.ScrollView (i think that's the right way to say it) you have access to the ui.ScrollView also. Anyway, it's still interesting what you can do. I purposely didn't make a lot of generic loops, so anyone interested could test their own way.
import ui, console ''' A long winded example of using a ui.TableView as a banner rather than use generic loops, kept it open for trial and error there are easier ways to do this. but in some cases in can see this also a convient way. you can also manually scroll the list of course, also could be another type of controller for the content part of the view ''' class MyTable(ui.ListDataSource): def __init__(self, items): super().__init__(items) def tableview_cell_for_row(self, tableview, section, row): # Create and return a cell for the given section/row if row is 0: return self.cell0(tableview, section, row) elif row is 1: return self.cell1(tableview, section, row) elif row is 2: return self.cell2(tableview, section, row) elif row is 3: return self.cell3(tableview, section, row) elif row is 4: return self.cell4(tableview, section, row) def cell0(self, tableview, section, row): cell = ui.TableViewCell() cell.bg_color = 'orange' cell.text_label.text = 'TableViewCell()' return cell def cell1(self, tableview, section, row): cell = ui.TableViewCell('subtitle') cell.bg_color = 'purple' cell.text_label.text = 'TableViewCell(subtitle)' cell.detail_text_label.text = 'the subtitle line' return cell def cell2(self, tableview, section, row): cell = ui.TableViewCell('value1') cell.bg_color = 'green' cell.text_label.text = 'TableViewCell(value1)' cell.detail_text_label.text = 'the subtitle line' return cell def cell3(self, tableview, section, row): cell = ui.TableViewCell('value2') cell.bg_color = 'deeppink' cell.text_label.font = ('Avenir Next Condensed', 22) cell.text_label.text = 'TableViewCell(value2)' cell.detail_text_label.text = 'the subtitle line' return cell def cell4(self, tableview, section, row): # draw 4 lines of text, each in a new ui.Label # also a button in the center of the view # the action for the button in the center of the cell def btn_action(sender): console.alert('yes, the button was clicked') cell = ui.TableViewCell() cell.bg_color = 'navy' cell.height = tableview.row_height cell.width = tableview.width # create the ui.Labels and assign the attrs y = 10 for i in range(1, 5): lb = ui.Label() lb.font =('Futura', 28) lb.text = 'Line ' + str(i) lb.text_color = 'white' lb.size_to_fit() lb.x = 10 lb.y = y y += lb.bounds.max_y + 10 cell.content_view.add_subview(lb) btn = ui.Button(frame = (0, 0, 128, 128)) btn.font = ('Arial Rounded MT Bold', 28) btn.corner_radius = btn.width / 2 btn.title ='Yeah' btn.bg_color = 'teal' btn.tint_color = 'white' btn.center = cell.center btn.action = btn_action cell.content_view.add_subview(btn) return cell def tableview_can_delete(self, tableview, section, row): # Return True if the user should be able to delete the given row. return False class MyClass(ui.View): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.header = None self.tv = None self.make_view() def make_view(self): h = ui.View(frame = (0, 0, self.width, self.height * .25)) h.flex = 'wh' self.add_subview(h) tv = ui.TableView(name = 'tv', frame = h.bounds) tv.row_height = h.height tv.data_source = MyTable(range(5)) tv.paging_enabled = True # important tv.shows_vertical_scroll_indicator = False # important tv.allows_selection = False # important self.tv = tv h.add_subview(tv) if __name__ == '__main__': import time w = ui.get_screen_size()[0] - 100 h = ui.get_screen_size()[1] - 100 f = (0, 0, w, h) mc = MyClass(frame = f, bg_color = 'white', name = 'Header??') mc.present('sheet') # just show each row in the table with a delay rh = mc.tv.row_height for i in range(0, 5): # can access the ui.ScrollView from the ui.TableView as its # ui.Ta mc.tv.content_offset = (0, i * rh) time.sleep(1)
-
Hmmm, well should have done
tv.bounces = False
Also should have also implemented def layout(self) for MyClass.
I am sure many other things also
But was just more to give an idea. No one said anything , I just thought I should have been more clear.