@@ -51,15 +51,23 @@ class BlockBarButtonItem: UIBarButtonItem {
51
51
self . target = self
52
52
}
53
53
54
+ convenience init ( barButtonSystemItem: UIBarButtonSystemItem ) {
55
+ self . init ( barButtonSystemItem: barButtonSystemItem, target: nil , action: #selector( barButtonItemPressed) )
56
+ self . target = self
57
+ }
58
+
54
59
convenience init (
55
60
title: String ? ,
56
61
image: UIImage ? ,
62
+ barButtonSystemItem: UIBarButtonSystemItem ? ,
57
63
style: UIBarButtonItemStyle ,
58
64
enabled: Bool ? ,
59
65
tintColor: UIColor ? ,
60
66
titleTextAttributes: [ String : Any ] ?
61
67
) {
62
- if let title = title {
68
+ if let barButtonSystemItem = barButtonSystemItem {
69
+ self . init ( barButtonSystemItem: barButtonSystemItem)
70
+ } else if let title = title {
63
71
self . init ( title: title, style: style)
64
72
} else {
65
73
self . init ( image: image, style: style)
@@ -192,6 +200,36 @@ func barButtonStyleFromString(_ string: String?) -> UIBarButtonItemStyle {
192
200
}
193
201
}
194
202
203
+ func barButtonSystemItemFromString( _ string: String ? ) -> UIBarButtonSystemItem ? {
204
+ switch string {
205
+ case . some( " done " ) : return . done
206
+ case . some( " cancel " ) : return . cancel
207
+ case . some( " edit " ) : return . edit
208
+ case . some( " save " ) : return . save
209
+ case . some( " add " ) : return . add
210
+ case . some( " flexibleSpace " ) : return . flexibleSpace
211
+ // case .some("fixedSpace"): return .fixedSpace
212
+ case . some( " compose " ) : return . compose
213
+ case . some( " reply " ) : return . reply
214
+ case . some( " action " ) : return . action
215
+ case . some( " organize " ) : return . organize
216
+ case . some( " bookmarks " ) : return . bookmarks
217
+ case . some( " search " ) : return . search
218
+ case . some( " refresh " ) : return . refresh
219
+ case . some( " stop " ) : return . stop
220
+ case . some( " camera " ) : return . camera
221
+ case . some( " trash " ) : return . trash
222
+ case . some( " play " ) : return . play
223
+ case . some( " pause " ) : return . pause
224
+ case . some( " rewind " ) : return . rewind
225
+ case . some( " fastForward " ) : return . fastForward
226
+ case . some( " undo " ) : return . undo
227
+ case . some( " redo " ) : return . redo
228
+ case . some( " pageCurl " ) : return . pageCurl
229
+ default : return nil
230
+ }
231
+ }
232
+
195
233
func statusBarStyleFromString( _ string: String ? ) -> UIStatusBarStyle {
196
234
switch ( string) {
197
235
case . some( " light " ) : return . lightContent
@@ -233,7 +271,7 @@ func lower(_ key: String) -> String {
233
271
return key. substring ( to: i) . lowercased ( ) + key. substring ( from: i)
234
272
}
235
273
236
- func configurebarButtonItemFromPrefix (
274
+ func configureBarButtonItemFromPrefix (
237
275
_ prefix: String ,
238
276
_ props: [ String : AnyObject ] ,
239
277
_ passedItem: UIBarButtonItem ?
@@ -246,6 +284,8 @@ func configurebarButtonItemFromPrefix(
246
284
247
285
let title = stringForKey ( lower ( " \( prefix) Title " ) , props)
248
286
let image = imageForKey ( lower ( " \( prefix) Image " ) , props)
287
+ let systemItem = stringForKey ( lower ( " \( prefix) SystemItem " ) , props)
288
+ let barButtonSystemItem = barButtonSystemItemFromString ( systemItem)
249
289
let enabled = boolForKey ( lower ( " \( prefix) Enabled " ) , props)
250
290
let tintColor = colorForKey ( lower ( " \( prefix) TintColor " ) , props)
251
291
let style = stringForKey ( lower ( " \( prefix) Style " ) , props)
@@ -262,30 +302,32 @@ func configurebarButtonItemFromPrefix(
262
302
let barButton = BlockBarButtonItem (
263
303
title: title ?? prev. title,
264
304
image: image ?? prev. image,
305
+ barButtonSystemItem: barButtonSystemItem,
265
306
style: barButtonStyleFromString ( style) ,
266
307
enabled: enabled,
267
308
tintColor: tintColor,
268
309
titleTextAttributes: titleTextAttributes
269
310
)
270
-
311
+
271
312
barButton. accessibilityLabel = accessibilityLabel
272
313
barButton. accessibilityIdentifier = testID
273
-
314
+
274
315
return barButton
275
316
} else {
276
317
return nil
277
318
}
278
319
} else {
279
- if ( title != nil || image != nil ) {
320
+ if ( title != nil || image != nil || barButtonSystemItem != nil ) {
280
321
let barButton = BlockBarButtonItem (
281
322
title: title,
282
323
image: image,
324
+ barButtonSystemItem: barButtonSystemItem,
283
325
style: barButtonStyleFromString ( style) ,
284
326
enabled: enabled,
285
327
tintColor: tintColor,
286
328
titleTextAttributes: titleTextAttributes
287
329
)
288
-
330
+
289
331
barButton. accessibilityLabel = accessibilityLabel
290
332
barButton. accessibilityIdentifier = testID
291
333
@@ -301,7 +343,7 @@ func configureBarButtonArrayForKey(_ key: String, _ props: [String: AnyObject])
301
343
var result = [ BlockBarButtonItem] ( )
302
344
for item in buttons {
303
345
if let buttonProps = item as? [ String : AnyObject ] {
304
- if let button = configurebarButtonItemFromPrefix ( " " , buttonProps, nil ) {
346
+ if let button = configureBarButtonItemFromPrefix ( " " , buttonProps, nil ) {
305
347
result. append ( button)
306
348
}
307
349
}
@@ -387,7 +429,7 @@ open class DefaultReactNavigationImplementation: ReactNavigationImplementation {
387
429
tabBar. isTranslucent = false
388
430
}
389
431
}
390
-
432
+
391
433
if numberHasChanged ( " tintColor " , prev, next) {
392
434
if let tintColor = colorForKey ( " tintColor " , next) {
393
435
tabBar. tintColor = tintColor
@@ -406,7 +448,7 @@ open class DefaultReactNavigationImplementation: ReactNavigationImplementation {
406
448
407
449
}
408
450
}
409
-
451
+
410
452
if mapHasChanged ( " backgroundImage " , prev, next) {
411
453
tabBar. backgroundImage = imageForKey ( " backgroundImage " , next)
412
454
}
@@ -487,7 +529,7 @@ open class DefaultReactNavigationImplementation: ReactNavigationImplementation {
487
529
}
488
530
}
489
531
navItem. setRightBarButtonItems ( rightBarButtonItems, animated: true )
490
- } else if let rightBarButtonItem = configurebarButtonItemFromPrefix ( " right " , next, navItem. rightBarButtonItem) {
532
+ } else if let rightBarButtonItem = configureBarButtonItemFromPrefix ( " right " , next, navItem. rightBarButtonItem) {
491
533
rightBarButtonItem. actionHandler = { [ weak viewController] in
492
534
viewController? . emitEvent ( " onRightPress " , body: nil )
493
535
}
@@ -502,7 +544,7 @@ open class DefaultReactNavigationImplementation: ReactNavigationImplementation {
502
544
}
503
545
}
504
546
navItem. setLeftBarButtonItems ( leftBarButtonItems, animated: true )
505
- } else if let leftBarButtonItem = configurebarButtonItemFromPrefix ( " left " , next, navItem. leftBarButtonItem) {
547
+ } else if let leftBarButtonItem = configureBarButtonItemFromPrefix ( " left " , next, navItem. leftBarButtonItem) {
506
548
leftBarButtonItem. actionHandler = { [ weak viewController] in
507
549
// TODO(lmr): we want to dismiss here...
508
550
viewController? . emitEvent ( " onLeftPress " , body: nil )
0 commit comments