@@ -10,89 +10,94 @@ import SwiftUI
1010import BBSwiftUIKit
1111
1212struct TableViewExample : View {
13- @State var list = 0 ..< 100
14- @State var updateHeight = false
15- @State var reloadData = false
16- @State var reloadRows : [ Int ] = [ ]
17- @State var scrollToRow : Int ? = nil
18- @State var contentOffset : CGPoint = . zero
19- @State var contentOffsetToScrollAnimated : CGPoint ? = nil
20- @State var isRefreshing : Bool = false
21- @State var isLoadingMore : Bool = false
13+
14+ class Model : ObservableObject {
15+ @Published var list = 0 ..< 100
16+ @Published var updateHeight = false
17+ @Published var reloadData = false
18+ @Published var reloadRows : [ Int ] = [ ]
19+ @Published var scrollToRow : Int ? = nil
20+ @Published var contentOffset : CGPoint = . zero
21+ @Published var contentOffsetToScrollAnimated : CGPoint ? = nil
22+ @Published var isRefreshing : Bool = false
23+ @Published var isLoadingMore : Bool = false
24+
25+ func reloadListData( ) {
26+ self . list = 0 ..< 100
27+ self . updateHeight. toggle ( )
28+ self . reloadData = true
29+ }
30+
31+ func reloadListRows( ) {
32+ list = 0 ..< 100
33+ updateHeight. toggle ( )
34+ reloadRows = ( 0 ..< 10 ) . map { $0 }
35+ }
36+ }
37+
38+ @ObservedObject var model = Model ( )
2239
2340 var body : some View {
2441 VStack {
25- BBTableView ( list) { i in
42+ BBTableView ( model . list) { i in
2643 if i % 2 == 0 {
27- Text ( " \( i) " )
28- . frame ( height: self . updateHeight ? 50 : 100 )
44+ Text ( " \( i) \( self . model . updateHeight ? " " : " A " ) " )
45+ . frame ( height: self . model . updateHeight ? 50 : 100 )
2946 . padding ( )
3047 . background ( Color . blue)
3148 } else {
3249 Image ( systemName: " heart " )
3350 . resizable ( )
3451 . scaledToFit ( )
35- . frame ( height: self . updateHeight ? 20 : 40 )
52+ . frame ( height: self . model . updateHeight ? 20 : 40 )
3653 . padding ( )
3754 . background ( Color . orange)
3855 }
3956 }
40- . bb_reloadData ( $reloadData)
41- . bb_reloadRows ( $reloadRows, animation: . automatic)
42- . bb_scrollToRow ( $scrollToRow, position: . none, animated: true )
43- . bb_contentOffset ( $contentOffset)
44- . bb_contentOffsetToScrollAnimated ( $contentOffsetToScrollAnimated)
57+ . bb_reloadData ( $model . reloadData)
58+ . bb_reloadRows ( $model . reloadRows, animation: . automatic)
59+ . bb_scrollToRow ( $model . scrollToRow, position: . none, animated: true )
60+ . bb_contentOffset ( $model . contentOffset)
61+ . bb_contentOffsetToScrollAnimated ( $model . contentOffsetToScrollAnimated)
4562 . bb_setupRefreshControl { refreshControl in
4663 refreshControl. tintColor = . blue
4764 refreshControl. attributedTitle = NSAttributedString ( string: " Loading... " , attributes: [ . font: UIFont . systemFont ( ofSize: 15 ) , . foregroundColor: UIColor . blue] )
4865 }
49- . bb_pullDownToRefresh ( isRefreshing: $isRefreshing) {
66+ . bb_pullDownToRefresh ( isRefreshing: $model . isRefreshing) {
5067 DispatchQueue . main. asyncAfter ( deadline: . now( ) + 1 ) {
51- self . reloadListData ( )
52- self . isRefreshing = false
68+ self . model . reloadListData ( )
69+ self . model . isRefreshing = false
5370 }
5471 }
5572 . bb_pullUpToLoadMore ( bottomSpace: 30 ) {
56- if self . isLoadingMore { return }
57- self . isLoadingMore = true
73+ if self . model . isLoadingMore { return }
74+ self . model . isLoadingMore = true
5875 DispatchQueue . main. asyncAfter ( deadline: . now( ) + 1 ) {
59- self . list = 0 ..< self . list. last! + 11
60- self . isLoadingMore = false
76+ self . model . list = 0 ..< self . model . list. last! + 11
77+ self . model . isLoadingMore = false
6178 }
6279 }
6380
64- Slider ( value: $contentOffset. y, in: 0 ... 1000 )
81+ Slider ( value: $model . contentOffset. y, in: 0 ... 1000 )
6582
6683 Button ( " Scroll to y = 1000 " ) {
67- self . contentOffsetToScrollAnimated = CGPoint ( x: 0 , y: 1000 )
84+ self . model . contentOffsetToScrollAnimated = CGPoint ( x: 0 , y: 1000 )
6885 }
6986 . padding ( )
7087
7188 Button ( " Reload data " ) {
72- self . reloadListData ( )
73- self . scrollToRow = 0
89+ self . model . reloadListData ( )
90+ self . model . scrollToRow = 0
7491 }
7592 . padding ( )
7693
7794 Button ( " Reload rows " ) {
78- self . reloadListRows ( )
79- self . scrollToRow = 0
95+ self . model . reloadListRows ( )
96+ self . model . scrollToRow = 0
8097 }
8198 . padding ( )
8299 }
83100 }
84-
85- private func reloadListData( ) {
86- self . list = 0 ..< 100
87- self . updateHeight. toggle ( )
88- self . reloadData = true
89- }
90-
91- private func reloadListRows( ) {
92- self . list = 0 ..< 100
93- self . updateHeight. toggle ( )
94- self . reloadRows = ( 0 ..< 10 ) . map { $0 }
95- }
96101}
97102
98103struct TableViewExample_Previews : PreviewProvider {
0 commit comments