Skip to content

Commit

Permalink
Merge pull request #215 from grahammendick/uibar-button
Browse files Browse the repository at this point in the history
  • Loading branch information
grahammendick authored Aug 21, 2018
2 parents 29c2304 + ca1a4ba commit 0d86be8
Show file tree
Hide file tree
Showing 23 changed files with 375 additions and 7 deletions.
14 changes: 10 additions & 4 deletions NavigationReactNative/sample/zoom/Detail.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
import React from 'react';
import {StyleSheet, ScrollView, Text, View, TouchableHighlight} from 'react-native';
import {StyleSheet, ScrollView, Text, View, Platform, TouchableHighlight} from 'react-native';
import {NavigationContext} from 'navigation-react';
import {RightBarIOS, BarButtonIOS} from 'navigation-react-native';

export default ({color}) => (
<NavigationContext.Consumer>
{({stateNavigator}) => (
<ScrollView
contentInsetAdjustmentBehavior="automatic"
contentContainerStyle={{flex:1}}>
<TouchableHighlight
<RightBarIOS>
<BarButtonIOS systemItem="cancel" onPress={() => {
stateNavigator.navigateBack(1);
}} />
</RightBarIOS>
{Platform.OS === 'android' && <TouchableHighlight
underlayColor="#fff"
onPress={() => {
stateNavigator.navigateBack(1);
}}>
<Text style={styles.back}>X</Text>
</TouchableHighlight>
</TouchableHighlight>}
<View
style={[
{backgroundColor: color},
Expand All @@ -33,10 +39,10 @@ const styles = StyleSheet.create({
fontWeight: 'bold',
paddingLeft: 20,
paddingTop: 10,
paddingBottom: 5,
},
color: {
flex: .6,
marginTop: 10,
marginLeft: 15,
marginRight: 15,
},
Expand Down
3 changes: 3 additions & 0 deletions NavigationReactNative/src/BarButtonIOS.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { requireNativeComponent, Platform } from 'react-native';

export default Platform.OS === 'ios' ? requireNativeComponent('NVBarButton', null) : () => null;
3 changes: 3 additions & 0 deletions NavigationReactNative/src/LeftBarIOS.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { requireNativeComponent, Platform } from 'react-native';

export default Platform.OS === 'ios' ? requireNativeComponent('NVLeftBar', null) : () => null;
5 changes: 4 additions & 1 deletion NavigationReactNative/src/NavigationReactNative.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import Scene from './Scene';
import addNavigateHandlers from './addNavigateHandlers';
import LeftBarIOS from './LeftBarIOS';
import RightBarIOS from './RightBarIOS';
import BarButtonIOS from './BarButtonIOS';

export { addNavigateHandlers, Scene };
export { addNavigateHandlers, Scene, LeftBarIOS, RightBarIOS, BarButtonIOS };
3 changes: 3 additions & 0 deletions NavigationReactNative/src/RightBarIOS.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { requireNativeComponent, Platform } from 'react-native';

export default Platform.OS === 'ios' ? requireNativeComponent('NVRightBar', null) : () => null;
4 changes: 4 additions & 0 deletions NavigationReactNative/src/ios/NVBarButtonManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#import <React/RCTViewManager.h>

@interface NVBarButtonManager : RCTViewManager
@end
21 changes: 21 additions & 0 deletions NavigationReactNative/src/ios/NVBarButtonManager.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#import "NVBarButtonManager.h"
#import "NVBarButtonView.h"

#import <UIKit/UIKit.h>
#import <React/RCTComponent.h>

@implementation NVBarButtonManager

RCT_EXPORT_MODULE()

- (UIView *)view
{
return [[NVBarButtonView alloc] init];
}

RCT_EXPORT_VIEW_PROPERTY(title, NSString)
RCT_EXPORT_VIEW_PROPERTY(image, UIImage)
RCT_EXPORT_VIEW_PROPERTY(systemItem, UIBarButtonSystemItem)
RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)

@end
12 changes: 12 additions & 0 deletions NavigationReactNative/src/ios/NVBarButtonView.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#import <UIKit/UIKit.h>
#import <React/RCTComponent.h>

@interface NVBarButtonView : UIView

@property UIBarButtonItem *button;
@property (nonatomic, assign) NSString *title;
@property (nonatomic, assign) UIImage *image;
@property (nonatomic, assign) UIBarButtonSystemItem systemItem;
@property (nonatomic, copy) RCTBubblingEventBlock onPress;

@end
41 changes: 41 additions & 0 deletions NavigationReactNative/src/ios/NVBarButtonView.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#import "NVBarButtonView.h"

#import <UIKit/UIKit.h>
#import <React/UIView+React.h>

@implementation NVBarButtonView

- (id)init
{
if (self = [super init]) {
self.button = [[UIBarButtonItem alloc] init];
self.button.style = UIBarButtonItemStylePlain;
self.button.target = self;
self.button.action = @selector(buttonPressed);
}
return self;
}

- (void)setTitle:(NSString *)title
{
self.button.title = title;
}

- (void)setImage:(UIImage *)image
{
self.button.image = image;
}

- (void)setSystemItem:(UIBarButtonSystemItem)systemItem
{
self.button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:systemItem target:self action:@selector(buttonPressed)];
}

-(void)buttonPressed
{
if (!!self.onPress) {
self.onPress(nil);
}
}

@end
7 changes: 7 additions & 0 deletions NavigationReactNative/src/ios/NVBarView.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#import <UIKit/UIKit.h>

@interface NVBarView : UIView

@property NSMutableArray *buttons;

@end
48 changes: 48 additions & 0 deletions NavigationReactNative/src/ios/NVBarView.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#import "NVBarView.h"
#import "NVBarButtonView.h"

#import <React/UIView+React.h>

@implementation NVBarView

- (id)init
{
if (self = [super init]) {
self.buttons = [[NSMutableArray alloc] init];
}
return self;
}

- (void)insertReactSubview:(UIView *)subview atIndex:(NSInteger)atIndex
{
[super insertReactSubview:subview atIndex:atIndex];
[self.buttons insertObject:((NVBarButtonView *) subview).button atIndex:atIndex];
[self setBarButtons:self.buttons];
}

- (void)removeReactSubview:(UIView *)subview
{
[super removeReactSubview:subview];
[self.buttons removeObject:((NVBarButtonView *) subview).button];
[self setBarButtons:self.buttons];
}

- (void)didMoveToWindow
{
[super didMoveToWindow];
[self setBarButtons:self.buttons];
}

- (void)willMoveToSuperview:(nullable UIView *)newSuperview
{
[super willMoveToSuperview:newSuperview];
if (!newSuperview) {
[self setBarButtons:nil];
}
}

-(void)setBarButtons:(NSMutableArray *)buttons
{
}

@end
4 changes: 4 additions & 0 deletions NavigationReactNative/src/ios/NVLeftBarManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#import <React/RCTViewManager.h>

@interface NVLeftBarManager : RCTViewManager
@end
13 changes: 13 additions & 0 deletions NavigationReactNative/src/ios/NVLeftBarManager.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#import "NVLeftBarManager.h"
#import "NVLeftBarView.h"

@implementation NVLeftBarManager

RCT_EXPORT_MODULE()

- (UIView *)view
{
return [[NVLeftBarView alloc] init];
}

@end
6 changes: 6 additions & 0 deletions NavigationReactNative/src/ios/NVLeftBarView.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#import "NVBarView.h"

#import <UIKit/UIKit.h>

@interface NVLeftBarView : NVBarView
@end
12 changes: 12 additions & 0 deletions NavigationReactNative/src/ios/NVLeftBarView.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#import "NVLeftBarView.h"

#import <React/UIView+React.h>

@implementation NVLeftBarView

-(void)setBarButtons:(NSMutableArray *)buttons
{
[self.reactViewController.navigationItem setLeftBarButtonItems:buttons];
}

@end
4 changes: 4 additions & 0 deletions NavigationReactNative/src/ios/NVRightBarManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#import <React/RCTViewManager.h>

@interface NVRightBarManager : RCTViewManager
@end
13 changes: 13 additions & 0 deletions NavigationReactNative/src/ios/NVRightBarManager.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#import "NVRightBarManager.h"
#import "NVRightBarView.h"

@implementation NVRightBarManager

RCT_EXPORT_MODULE()

- (UIView *)view
{
return [[NVRightBarView alloc] init];
}

@end
6 changes: 6 additions & 0 deletions NavigationReactNative/src/ios/NVRightBarView.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#import "NVBarView.h"

#import <UIKit/UIKit.h>

@interface NVRightBarView : NVBarView
@end
12 changes: 12 additions & 0 deletions NavigationReactNative/src/ios/NVRightBarView.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#import "NVRightBarView.h"

#import <React/UIView+React.h>

@implementation NVRightBarView

-(void)setBarButtons:(NSMutableArray *)buttons
{
[self.reactViewController.navigationItem setRightBarButtonItems:buttons];
}

@end
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
/* Begin PBXBuildFile section */
7020F6D020ECD25F00E7A74E /* NVSceneController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7020F6CF20ECD25F00E7A74E /* NVSceneController.m */; };
7020F70A20ECD6FB00E7A74E /* NavigationModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 7020F70920ECD6FB00E7A74E /* NavigationModule.m */; };
70BB3291212B2BC700DE0D13 /* NVRightBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 70BB3290212B2BC700DE0D13 /* NVRightBarView.m */; };
70BB3294212B2C0A00DE0D13 /* NVRightBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 70BB3293212B2C0A00DE0D13 /* NVRightBarManager.m */; };
70BB3298212B2C4000DE0D13 /* NVLeftBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 70BB3297212B2C4000DE0D13 /* NVLeftBarView.m */; };
70BB329A212B2C5100DE0D13 /* NVLeftBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 70BB3299212B2C5100DE0D13 /* NVLeftBarManager.m */; };
70BB329E212B2C9000DE0D13 /* NVBarButtonManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 70BB329D212B2C9000DE0D13 /* NVBarButtonManager.m */; };
70BB32A0212B2CA000DE0D13 /* NVBarButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 70BB329F212B2CA000DE0D13 /* NVBarButtonView.m */; };
70BB32A4212B2D4100DE0D13 /* NVBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 70BB32A3212B2D4100DE0D13 /* NVBarView.m */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
Expand All @@ -30,6 +37,20 @@
7020F6CF20ECD25F00E7A74E /* NVSceneController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NVSceneController.m; sourceTree = "<group>"; };
7020F70820ECD6ED00E7A74E /* NavigationModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NavigationModule.h; sourceTree = "<group>"; };
7020F70920ECD6FB00E7A74E /* NavigationModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NavigationModule.m; sourceTree = "<group>"; };
70BB3290212B2BC700DE0D13 /* NVRightBarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NVRightBarView.m; sourceTree = "<group>"; };
70BB3292212B2BEB00DE0D13 /* NVRightBarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NVRightBarView.h; sourceTree = "<group>"; };
70BB3293212B2C0A00DE0D13 /* NVRightBarManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NVRightBarManager.m; sourceTree = "<group>"; };
70BB3295212B2C1400DE0D13 /* NVRightBarManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NVRightBarManager.h; sourceTree = "<group>"; };
70BB3296212B2C3500DE0D13 /* NVLeftBarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NVLeftBarView.h; sourceTree = "<group>"; };
70BB3297212B2C4000DE0D13 /* NVLeftBarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NVLeftBarView.m; sourceTree = "<group>"; };
70BB3299212B2C5100DE0D13 /* NVLeftBarManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NVLeftBarManager.m; sourceTree = "<group>"; };
70BB329B212B2C5900DE0D13 /* NVLeftBarManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NVLeftBarManager.h; sourceTree = "<group>"; };
70BB329C212B2C7B00DE0D13 /* NVBarButtonManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NVBarButtonManager.h; sourceTree = "<group>"; };
70BB329D212B2C9000DE0D13 /* NVBarButtonManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NVBarButtonManager.m; sourceTree = "<group>"; };
70BB329F212B2CA000DE0D13 /* NVBarButtonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NVBarButtonView.m; sourceTree = "<group>"; };
70BB32A1212B2CA900DE0D13 /* NVBarButtonView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NVBarButtonView.h; sourceTree = "<group>"; };
70BB32A2212B2D3700DE0D13 /* NVBarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NVBarView.h; sourceTree = "<group>"; };
70BB32A3212B2D4100DE0D13 /* NVBarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NVBarView.m; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand All @@ -46,6 +67,20 @@
7020F6B520ECD07A00E7A74E = {
isa = PBXGroup;
children = (
70BB32A3212B2D4100DE0D13 /* NVBarView.m */,
70BB32A2212B2D3700DE0D13 /* NVBarView.h */,
70BB32A1212B2CA900DE0D13 /* NVBarButtonView.h */,
70BB329F212B2CA000DE0D13 /* NVBarButtonView.m */,
70BB329D212B2C9000DE0D13 /* NVBarButtonManager.m */,
70BB329C212B2C7B00DE0D13 /* NVBarButtonManager.h */,
70BB329B212B2C5900DE0D13 /* NVLeftBarManager.h */,
70BB3299212B2C5100DE0D13 /* NVLeftBarManager.m */,
70BB3297212B2C4000DE0D13 /* NVLeftBarView.m */,
70BB3296212B2C3500DE0D13 /* NVLeftBarView.h */,
70BB3295212B2C1400DE0D13 /* NVRightBarManager.h */,
70BB3293212B2C0A00DE0D13 /* NVRightBarManager.m */,
70BB3292212B2BEB00DE0D13 /* NVRightBarView.h */,
70BB3290212B2BC700DE0D13 /* NVRightBarView.m */,
7020F70920ECD6FB00E7A74E /* NavigationModule.m */,
7020F70820ECD6ED00E7A74E /* NavigationModule.h */,
7020F6CF20ECD25F00E7A74E /* NVSceneController.m */,
Expand Down Expand Up @@ -119,8 +154,15 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
70BB329E212B2C9000DE0D13 /* NVBarButtonManager.m in Sources */,
70BB3294212B2C0A00DE0D13 /* NVRightBarManager.m in Sources */,
70BB3291212B2BC700DE0D13 /* NVRightBarView.m in Sources */,
70BB329A212B2C5100DE0D13 /* NVLeftBarManager.m in Sources */,
70BB32A0212B2CA000DE0D13 /* NVBarButtonView.m in Sources */,
70BB32A4212B2D4100DE0D13 /* NVBarView.m in Sources */,
7020F6D020ECD25F00E7A74E /* NVSceneController.m in Sources */,
7020F70A20ECD6FB00E7A74E /* NavigationModule.m in Sources */,
70BB3298212B2C4000DE0D13 /* NVLeftBarView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
15 changes: 13 additions & 2 deletions NavigationReactNative/test/navigation-react-native-tests.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { StateNavigator } from 'navigation';
import { NavigationContext, NavigationHandler } from 'navigation-react';
import { addNavigateHandlers, Scene } from 'navigation-react-native';
import { addNavigateHandlers, Scene, RightBarIOS, BarButtonIOS } from 'navigation-react-native';
import * as React from 'react';
import { View, Text, TouchableHighlight } from 'react-native';

Expand All @@ -27,7 +27,18 @@ var People = () => (
);

var Person = ({ name }) => (
<Text>{name}</Text>
<NavigationContext.Consumer>
{({stateNavigator}) => (
<View>
<RightBarIOS>
<BarButtonIOS systemItem="cancel" onPress={() => {
stateNavigator.navigateBack(1)
}} />
</RightBarIOS>
<Text>{name}</Text>
</View>
)}
</NavigationContext.Consumer>
);

var { people, person } = stateNavigator.states;
Expand Down
Loading

0 comments on commit 0d86be8

Please sign in to comment.