arrays - Swift - Cascading Pickers -
assuming have 3 pickers following content:
restaurant{ [menu] name } menu{ [ingredients] time } ingredients{ ... }
how can implement picker updates automatically if objects changes? (e.g. when restaurant picked, menu , ingredients changes, when menu picked ingredients changes)
you can this:
class viewcontroller: uiviewcontroller, uipickerviewdatasource, uipickerviewdelegate { @iboutlet weak var restaurantspicker: uipickerview! @iboutlet weak var menupicker: uipickerview! @iboutlet weak var ingredientspicker: uipickerview! var restaurants = ["r1", "r2", "r3"] var menus = ["r1": ["m1", "m2"], "r2": ["m2"], "r3": ["m1", "m3"]] var ingredients = ["m1":["i1", "i2", "i3"], "m2":["i1", "i3"], "m3":["i2", "i3"]] func numberofcomponents(in pickerview: uipickerview) -> int { return 1 } func pickerview(_ pickerview: uipickerview, numberofrowsincomponent component: int) -> int { if pickerview === restaurantspicker { return restaurants.count } else if pickerview === menupicker { let restaurant = restaurants[restaurantspicker.selectedrow(incomponent: 0)] return menus[restaurant]!.count } else { let restaurant = restaurants[restaurantspicker.selectedrow(incomponent: 0)] let menu = menus[restaurant]![menupicker.selectedrow(incomponent: 0)] return ingredients[menu]!.count } } func pickerview(_ pickerview: uipickerview, titleforrow row: int, forcomponent component: int) -> string? { if pickerview === restaurantspicker { return restaurants[row] } else if pickerview === menupicker { let restaurant = restaurants[restaurantspicker.selectedrow(incomponent: 0)] return menus[restaurant]?[row] } else { let restaurant = restaurants[restaurantspicker.selectedrow(incomponent: 0)] let menu = menus[restaurant]![menupicker.selectedrow(incomponent: 0)] return ingredients[menu]?[row] } } func pickerview(_ pickerview: uipickerview, didselectrow row: int, incomponent component: int) { if pickerview === restaurantspicker { menupicker.reloadcomponent(0) ingredientspicker.reloadcomponent(0) } else if pickerview === menupicker { ingredientspicker.reloadcomponent(0) } } }
screenshot:
Comments
Post a Comment