Commit f1cfac16 authored by xwenliang's avatar xwenliang

update data structure

parent 3c8fc35e
......@@ -95,7 +95,6 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
Activity activity = getCurrentActivity();
if (activity != null && options.hasKey(PICKER_DATA)) {
view = activity.getLayoutInflater().inflate(R.layout.popup_picker_view, null);
pickerParent = (RelativeLayout) view.findViewById(R.id.pickerParent);
barLayout = (RelativeLayout) view.findViewById(R.id.barLayout);
cancelTV = (TextView) view.findViewById(R.id.cancel);
......@@ -218,26 +217,27 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
}
}
switch (options.getType(PICKER_DATA).name()) {
if (options.hasKey(PICKER_BG_COLOR)) {
ReadableArray array = options.getArray(PICKER_BG_COLOR);
for (int i = 0; i < array.size(); i++) {
if (i == 3) {
pickerColor[i] = (int) (array.getDouble(i) * 255);
} else {
pickerColor[i] = array.getInt(i);
}
}
}
ReadableArray pickerData = options.getArray(PICKER_DATA);
String name = pickerData.getType(0).name();
switch (name) {
case "Map":
pickerViewLinkage.setVisibility(View.VISIBLE);
pickerViewAlone.setVisibility(View.GONE);
ReadableMap linkageData = options.getMap(PICKER_DATA);
if (linkageData != null) {
pickerViewLinkage.setLinkageData(linkageData, curSelectedList);
}
pickerViewLinkage.setPickerData(pickerData, curSelectedList);
pickerViewLinkage.setIsLoop(isLoop);
if (options.hasKey(PICKER_BG_COLOR)) {
ReadableArray array = options.getArray(PICKER_BG_COLOR);
for (int i = 0; i < array.size(); i++) {
if (i == 3) {
pickerColor[i] = (int) (array.getDouble(i) * 255);
} else {
pickerColor[i] = array.getInt(i);
}
}
pickerViewLinkage.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2]));
}
pickerViewLinkage.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2]));
pickerViewLinkage.setOnSelectListener(new OnSelectedListener() {
@Override
public void onSelected(ArrayList<String> selectedList) {
......@@ -247,33 +247,13 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
});
pickerViewLinkage.setSelectValue(selectValue, curSelectedList);
break;
case "Array":
default:
pickerViewAlone.setVisibility(View.VISIBLE);
pickerViewLinkage.setVisibility(View.GONE);
ReadableArray aloneData = options.getArray(PICKER_DATA);
if (aloneData != null) {
switch (aloneData.getType(0).name()) {
case "Array":
pickerViewAlone.setPickerViewDta(aloneData, curSelectedList);
break;
default:
pickerViewAlone.setAloneData(aloneData, curSelectedList);
break;
}
}
pickerViewAlone.setPickerData(pickerData, curSelectedList);
pickerViewAlone.setIsLoop(isLoop);
if (options.hasKey(PICKER_BG_COLOR)) {
ReadableArray array = options.getArray(PICKER_BG_COLOR);
for (int i = 0; i < array.size(); i++) {
if (i == 3) {
pickerColor[i] = (int) (array.getDouble(i) * 255);
} else {
pickerColor[i] = array.getInt(i);
}
}
pickerViewAlone.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2]));
}
pickerViewAlone.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2]));
pickerViewAlone.setOnSelectedListener(new OnSelectedListener() {
@Override
......@@ -284,10 +264,10 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
});
pickerViewAlone.setSelectValue(selectValue, curSelectedList);
break;
}
if (popupWindow == null) {
popupWindow = new PopupWindow(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
popupWindow.setBackgroundDrawable(new ColorDrawable());
......
......@@ -43,7 +43,18 @@ public class PickerViewAlone extends LinearLayout {
this.onSelectedListener = listener;
}
public void setAloneData(ReadableArray array, final ArrayList<String> curSelectedList) {
public void setPickerData(ReadableArray array, final ArrayList<String> curSelectedList){
switch (array.getType(0).name()){
case "Array":
setMultipleData(array,curSelectedList);
break;
default:
setAloneData(array,curSelectedList);
break;
}
}
private void setAloneData(ReadableArray array, final ArrayList<String> curSelectedList) {
ArrayList<String> values = arrayToList(array);
final LoopView loopView = new LoopView(getContext());
LayoutParams params = new LayoutParams(
......@@ -69,8 +80,7 @@ public class PickerViewAlone extends LinearLayout {
pickerViewAloneLayout.addView(loopView);
}
public void setPickerViewDta(ReadableArray array, final ArrayList<String> curSelectedList) {
private void setMultipleData(ReadableArray array, final ArrayList<String> curSelectedList) {
final String[] selectedItems = new String[array.size()];
for (int i = 0; i < array.size(); i++) {
switch (array.getType(i).name()) {
......
......@@ -73,10 +73,7 @@ public class PickerViewLinkage extends LinearLayout {
private ArrayList<String> twoList = new ArrayList<>();
private ArrayList<String> threeList = new ArrayList<>();
private ReadableArray array;
private ReadableMap map;
private ReadableMap childMap;
private ArrayList<ReadableMap> data = new ArrayList<>();
private int selectOneIndex;
private int selectTwoIndex;
......@@ -87,12 +84,20 @@ public class PickerViewLinkage extends LinearLayout {
}
}
public void setLinkageData(final ReadableMap map, final ArrayList<String> curSelectedList) {
this.map = map;
ReadableMapKeySetIterator iterator = map.keySetIterator();
while (iterator.hasNextKey()) {
String key = iterator.nextKey();
oneList.add(key);
/**
* ReadableArray getMap will remove the item.
* <a href="https://github.com/facebook/react-native/issues/8557"></a>
* */
public void setPickerData(ReadableArray array, final ArrayList<String> curSelectedList) {
oneList.clear();
for (int i = 0; i < array.size(); i++) {
ReadableMap map = array.getMap(i);
data.add(map);
ReadableMapKeySetIterator iterator = map.keySetIterator();
if (iterator.hasNextKey()) {
String oneValue = iterator.nextKey();
oneList.add(oneValue);
}
}
checkItems(loopViewOne, oneList);
if (curSelectedList.size() > 0) {
......@@ -100,126 +105,135 @@ public class PickerViewLinkage extends LinearLayout {
} else {
curSelectedList.add(0, oneList.get(0));
}
String name = map.getType(oneList.get(0)).name();
switch (name) {
case "Map":
setRow(3);
childMap = map.getMap(oneList.get(0));
ReadableMapKeySetIterator childIterator = childMap.keySetIterator();
twoList.clear();
while (childIterator.hasNextKey()) {
String key = childIterator.nextKey();
twoList.add(key);
}
checkItems(loopViewTwo, twoList);
if (curSelectedList.size() > 1) {
curSelectedList.set(1, twoList.get(0));
} else {
curSelectedList.add(1, twoList.get(0));
}
array = childMap.getArray(twoList.get(0));
threeList.clear();
threeList = arrayToList(array);
checkItems(loopViewThree, threeList);
if (curSelectedList.size() > 2) {
curSelectedList.set(2, threeList.get(0));
} else {
curSelectedList.add(2, threeList.get(0));
}
ReadableArray childArray = data.get(0).getArray(oneList.get(0));
String name = childArray.getType(0).name();
if (name.equals("Map")) {
setRow(3);
twoList.clear();
getTwoListData();
checkItems(loopViewTwo, twoList);
if (curSelectedList.size() > 1) {
curSelectedList.set(1, twoList.get(0));
} else {
curSelectedList.add(1, twoList.get(0));
}
ReadableMap childMap = data.get(0).getArray(oneList.get(0)).getMap(0);
String key = childMap.keySetIterator().nextKey();
ReadableArray sunArray = childMap.getArray(key);
threeList.clear();
threeList = arrayToList(sunArray);
checkItems(loopViewThree, threeList);
if (curSelectedList.size() > 2) {
curSelectedList.set(2, threeList.get(0));
} else {
curSelectedList.add(2, threeList.get(0));
}
loopViewOne.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
selectOneIndex = index;
curSelectedList.set(0, item);
childMap = map.getMap(item);
ReadableMapKeySetIterator childIterator = childMap.keySetIterator();
twoList.clear();
while (childIterator.hasNextKey()) {
String key = childIterator.nextKey();
twoList.add(key);
loopViewOne.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
selectOneIndex = index;
curSelectedList.set(0, item);
twoList.clear();
ReadableArray arr = data.get(index).getArray(item);
for (int i = 0; i < arr.size(); i++) {
ReadableMap map = arr.getMap(i);
ReadableMapKeySetIterator ite = map.keySetIterator();
if (ite.hasNextKey()) {
twoList.add(ite.nextKey());
}
checkItems(loopViewTwo, twoList);
curSelectedList.set(1, twoList.get(0));
}
checkItems(loopViewTwo, twoList);
curSelectedList.set(1, twoList.get(0));
array = childMap.getArray(twoList.get(0));
threeList.clear();
threeList = arrayToList(array);
checkItems(loopViewThree, threeList);
curSelectedList.set(2, threeList.get(0));
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
ReadableArray ar = data.get(index).getArray(item);
ReadableMap childMap = ar.getMap(0);
String key = childMap.keySetIterator().nextKey();
ReadableArray sunArray = childMap.getArray(key);
threeList.clear();
threeList = arrayToList(sunArray);
checkItems(loopViewThree, threeList);
curSelectedList.set(2, threeList.get(0));
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
});
loopViewTwo.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
selectTwoIndex = index;
array = childMap.getArray(item);
threeList.clear();
threeList = arrayToList(array);
checkItems(loopViewThree, threeList);
curSelectedList.set(0, oneList.get(selectOneIndex));
curSelectedList.set(1, item);
curSelectedList.set(2, threeList.get(0));
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
}
});
loopViewTwo.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
selectTwoIndex = index;
ReadableArray arr = data.get(selectOneIndex).getArray(oneList.get(selectOneIndex));
ReadableMap childMap = arr.getMap(index);
String key = childMap.keySetIterator().nextKey();
ReadableArray sunArray = childMap.getArray(key);
threeList.clear();
threeList = arrayToList(sunArray);
checkItems(loopViewThree, threeList);
curSelectedList.set(0, oneList.get(selectOneIndex));
curSelectedList.set(1, item);
curSelectedList.set(2, threeList.get(0));
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
});
loopViewThree.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
curSelectedList.set(0, oneList.get(selectOneIndex));
curSelectedList.set(1, twoList.get(selectTwoIndex));
curSelectedList.set(2, item);
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
}
});
loopViewThree.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
curSelectedList.set(0, oneList.get(selectOneIndex));
curSelectedList.set(1, twoList.get(selectTwoIndex));
curSelectedList.set(2, item);
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
});
break;
case "Array":
setRow(2);
loopViewOne.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
selectOneIndex = index;
array = map.getArray(item);
twoList = arrayToList(array);
checkItems(loopViewTwo, twoList);
curSelectedList.set(0, item);
curSelectedList.set(1, twoList.get(0));
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
}
});
} else {
setRow(2);
loopViewOne.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
selectOneIndex = index;
ReadableArray arr = data.get(index).getArray(item);
twoList.clear();
twoList = arrayToList(arr);
checkItems(loopViewTwo, twoList);
curSelectedList.set(0, item);
curSelectedList.set(1, twoList.get(0));
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
});
array = map.getArray(oneList.get(0));
twoList = arrayToList(array);
checkItems(loopViewTwo, twoList);
}
});
twoList.clear();
twoList = arrayToList(childArray);
checkItems(loopViewTwo, twoList);
if (curSelectedList.size() > 1) {
curSelectedList.set(1, twoList.get(0));
} else {
curSelectedList.add(1, twoList.get(0));
loopViewTwo.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
curSelectedList.set(0, oneList.get(selectOneIndex));
curSelectedList.set(1, item);
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
}
loopViewTwo.setListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(String item, int index) {
curSelectedList.set(0, oneList.get(selectOneIndex));
curSelectedList.set(1, item);
if (onSelectedListener != null) {
onSelectedListener.onSelected(curSelectedList);
}
});
break;
default:
break;
}
});
}
}
......@@ -258,39 +272,26 @@ public class PickerViewLinkage extends LinearLayout {
} else {
switch (selectValue.length) {
case 1:
if (loopViewOne.hasItem(selectValue[0])) {
selectOneIndex = loopViewOne.getItemPosition(selectValue[0]);
loopViewOne.setSelectedPosition(selectOneIndex);
curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex));
} else {
loopViewOne.setSelectedPosition(0);
curSelectedList.set(0, loopViewOne.getIndexItem(0));
}
selectOneLoop(selectValue, curSelectedList);
switch (curRow) {
case 3:
childMap = map.getMap(oneList.get(selectOneIndex));
ReadableMapKeySetIterator childIterator = childMap.keySetIterator();
twoList.clear();
while (childIterator.hasNextKey()) {
String key = childIterator.nextKey();
twoList.add(key);
}
twoList.clear();
getTwoListData();
loopViewTwo.setItems(twoList);
loopViewTwo.setSelectedPosition(0);
curSelectedList.set(1, loopViewTwo.getIndexItem(0));
array = childMap.getArray(twoList.get(0));
threeList.clear();
threeList = arrayToList(array);
getThreeListData();
loopViewThree.setItems(threeList);
loopViewThree.setSelectedPosition(0);
curSelectedList.set(2, loopViewThree.getIndexItem(0));
break;
case 2:
array = map.getArray(oneList.get(selectOneIndex));
twoList = arrayToList(array);
twoList.clear();
getAllTwoListData();
loopViewTwo.setItems(twoList);
loopViewTwo.setSelectedPosition(0);
curSelectedList.set(1, loopViewTwo.getIndexItem(0));
......@@ -300,35 +301,15 @@ public class PickerViewLinkage extends LinearLayout {
case 2:
switch (curRow) {
case 3:
if (loopViewOne.hasItem(selectValue[0])) {
selectOneIndex = loopViewOne.getItemPosition(selectValue[0]);
loopViewOne.setSelectedPosition(selectOneIndex);
curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex));
} else {
loopViewOne.setSelectedPosition(0);
curSelectedList.set(0, loopViewOne.getIndexItem(0));
}
childMap = map.getMap(oneList.get(selectOneIndex));
ReadableMapKeySetIterator childIterator = childMap.keySetIterator();
selectOneLoop(selectValue, curSelectedList);
twoList.clear();
while (childIterator.hasNextKey()) {
String key = childIterator.nextKey();
twoList.add(key);
}
loopViewTwo.setItems(twoList);
if (loopViewTwo.hasItem(selectValue[1])) {
selectTwoIndex = loopViewTwo.getItemPosition(selectValue[1]);
loopViewTwo.setSelectedPosition(selectTwoIndex);
curSelectedList.set(1, loopViewTwo.getIndexItem(selectTwoIndex));
} else {
loopViewTwo.setSelectedPosition(0);
curSelectedList.set(1, loopViewTwo.getIndexItem(0));
}
array = childMap.getArray(twoList.get(selectTwoIndex));
getTwoListData();
selectTwoLoop(selectValue,curSelectedList);
threeList.clear();
threeList = arrayToList(array);
getThreeListData();
loopViewThree.setItems(threeList);
loopViewThree.setSelectedPosition(0);
curSelectedList.set(2, loopViewThree.getIndexItem(0));
......@@ -344,78 +325,124 @@ public class PickerViewLinkage extends LinearLayout {
private void selectValues(String[] values, final ArrayList<String> curSelectedList) {
switch (values.length) {
case 3:
if (loopViewOne.hasItem(values[0])) {
selectOneIndex = loopViewOne.getItemPosition(values[0]);
loopViewOne.setSelectedPosition(selectOneIndex);
curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex));
} else {
loopViewOne.setSelectedPosition(0);
curSelectedList.set(0, loopViewOne.getIndexItem(0));
}
selectOneLoop(values, curSelectedList);
childMap = map.getMap(oneList.get(selectOneIndex));
ReadableMapKeySetIterator childIterator = childMap.keySetIterator();
twoList.clear();
while (childIterator.hasNextKey()) {
String key = childIterator.nextKey();
twoList.add(key);
}
loopViewTwo.setItems(twoList);
if (loopViewTwo.hasItem(values[1])) {
selectTwoIndex = loopViewTwo.getItemPosition(values[1]);
loopViewTwo.setSelectedPosition(selectTwoIndex);
curSelectedList.set(1, loopViewTwo.getIndexItem(selectTwoIndex));
} else {
loopViewTwo.setSelectedPosition(0);
curSelectedList.set(1, loopViewTwo.getIndexItem(0));
}
getTwoListData();
selectTwoLoop(values, curSelectedList);
array = childMap.getArray(twoList.get(selectTwoIndex));
threeList.clear();
threeList = arrayToList(array);
loopViewThree.setItems(threeList);
if (loopViewThree.hasItem(values[2])) {
int selectThreeIndex = loopViewThree.getItemPosition(values[2]);
loopViewThree.setSelectedPosition(selectThreeIndex);
curSelectedList.set(2, loopViewThree.getIndexItem(selectThreeIndex));
} else {
loopViewThree.setSelectedPosition(0);
curSelectedList.set(2, loopViewThree.getIndexItem(0));
}
getThreeListData();
selectThreeLoop(values, curSelectedList);
break;
case 2:
if (loopViewOne.hasItem(values[0])) {
selectOneIndex = loopViewOne.getItemPosition(values[0]);
loopViewOne.setSelectedPosition(selectOneIndex);
curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex));
} else {
loopViewOne.setSelectedPosition(0);
curSelectedList.set(0, loopViewOne.getIndexItem(0));
}
selectOneLoop(values, curSelectedList);
array = map.getArray(oneList.get(selectOneIndex));
twoList = arrayToList(array);
loopViewTwo.setItems(twoList);
if (loopViewTwo.hasItem(values[1])) {
selectTwoIndex = loopViewTwo.getItemPosition(values[1]);
loopViewTwo.setSelectedPosition(selectTwoIndex);
curSelectedList.set(1, loopViewTwo.getIndexItem(selectTwoIndex));
} else {
loopViewTwo.setSelectedPosition(0);
curSelectedList.set(1, loopViewTwo.getIndexItem(0));
}
twoList.clear();
getAllTwoListData();
selectTwoLoop(values, curSelectedList);
break;
default:
break;
}
}
/**
* 设置第一个滚轮选中的值
*/
private void selectOneLoop(String[] values, final ArrayList<String> curSelectedList) {
if (loopViewOne.hasItem(values[0])) {
selectOneIndex = loopViewOne.getItemPosition(values[0]);
loopViewOne.setSelectedPosition(selectOneIndex);
curSelectedList.set(0, loopViewOne.getIndexItem(selectOneIndex));
} else {
selectOneIndex = 0;
loopViewOne.setSelectedPosition(0);
curSelectedList.set(0, loopViewOne.getIndexItem(0));
}
}
/**
* 设置第二个滚轮选中的值
*/
private void selectTwoLoop(String[] values, final ArrayList<String> curSelectedList) {
loopViewTwo.setItems(twoList);
if (loopViewTwo.hasItem(values[1])) {
selectTwoIndex = loopViewTwo.getItemPosition(values[1]);
loopViewTwo.setSelectedPosition(selectTwoIndex);
curSelectedList.set(1, loopViewTwo.getIndexItem(selectTwoIndex));
} else {
selectTwoIndex = 0;
loopViewTwo.setSelectedPosition(0);
curSelectedList.set(1, loopViewTwo.getIndexItem(0));
}
}
/**
* 设置第三个滚轮选中的值
*/
private void selectThreeLoop(String[] values, final ArrayList<String> curSelectedList) {
loopViewThree.setItems(threeList);
if (loopViewThree.hasItem(values[2])) {
int selectThreeIndex = loopViewThree.getItemPosition(values[2]);
loopViewThree.setSelectedPosition(selectThreeIndex);
curSelectedList.set(2, loopViewThree.getIndexItem(selectThreeIndex));
} else {
loopViewThree.setSelectedPosition(0);
curSelectedList.set(2, loopViewThree.getIndexItem(0));
}
}
/**
* 只有两个滚轮
* 获取第二个滚轮的值
*/
private void getAllTwoListData() {
ReadableArray arr = data.get(selectOneIndex).getArray(oneList.get(selectOneIndex));
twoList = arrayToList(arr);
}
/**
* 有三个滚轮
* 获取第二个滚轮的值
*/
private void getTwoListData() {
ReadableArray childArray = data.get(selectOneIndex).getArray(oneList.get(selectOneIndex));
for (int i = 0; i < childArray.size(); i++) {
ReadableMap map = childArray.getMap(i);
ReadableMapKeySetIterator iterator = map.keySetIterator();
if (iterator.hasNextKey()) {
twoList.add(iterator.nextKey());
}
}
}
/**
* 获取第三个滚轮的值
* */
private void getThreeListData(){
//{ NativeMap: {"b":[{"b1":[11,22,33,44]},{"b2":[55,66,77,88]},{"b3":[99,1010,1111,1212]}]} }
ReadableMap childMap = data.get(selectOneIndex).getArray(oneList.get(selectOneIndex)).getMap(selectTwoIndex);
String key = childMap.keySetIterator().nextKey();
ReadableArray sunArray = childMap.getArray(key);
threeList = arrayToList(sunArray);
}
public void setIsLoop(boolean isLoop) {
if (!isLoop) {
loopViewOne.setNotLoop();
loopViewTwo.setNotLoop();
loopViewThree.setNotLoop();
switch (curRow) {
case 2:
loopViewOne.setNotLoop();
loopViewTwo.setNotLoop();
break;
case 3:
loopViewOne.setNotLoop();
loopViewTwo.setNotLoop();
loopViewThree.setNotLoop();
break;
}
}
}
......
......@@ -22,12 +22,15 @@ typedef void(^backBolock)(NSDictionary * );
@property (strong, nonatomic) NSDictionary *pickerDic;//一开始进来的字典
@property (strong, nonatomic) NSArray *provinceArray;//省、市
@property (strong, nonatomic) NSArray *cityArray;//市,县
@property(strong,nonatomic)NSArray *dataDry;//一进来的就没有数组和字典的区别肯定是一个字典
@property (strong, nonatomic) NSMutableArray *provinceArray;//省、市
@property (strong, nonatomic) NSMutableArray *cityArray;//市,县
@property (strong, nonatomic) NSArray *townArray;//县,区
@property (strong, nonatomic) NSDictionary *selectedDic;//3级联动时候用到的
@property(strong,nonatomic)NSArray *selectthreeAry;
@property (strong,nonatomic)NSArray *selectArry;//2级联动时候用的
@property (strong,nonatomic)UIButton *leftBtn;//取消
......@@ -38,8 +41,6 @@ typedef void(^backBolock)(NSDictionary * );
@property(strong,nonatomic)NSString *rightStr;
//用来判断进来的类型
@property(strong,nonatomic)id value;
@property(assign,nonatomic)BOOL Correlation;//判断有没有没有关联
......@@ -52,10 +53,20 @@ typedef void(^backBolock)(NSDictionary * );
@property(assign,nonatomic)BOOL noArryElementBool;
@property(strong,nonatomic)NSMutableArray *infoArry;
//创建一个数组 接收进来的选择Value
@property(strong,nonatomic)NSArray *selectValueArry;
//创建一个下角标记录是第几行 来一进来判断第一行被选中 当进来的是关联两行的逻辑的时候 或者三行关联的时候取第二行做记录
@property(assign,nonatomic)NSInteger num;
//创建一个下角标 第三行做记录
@property(assign,nonatomic)NSInteger threenum;
-(instancetype)initWithFrame:(CGRect)frame dic:(NSDictionary *)dic leftStr:(NSString *)leftStr centerStr:(NSString *)centerStr rightStr:(NSString *)rightStr topbgColor:(NSArray *)topbgColor bottombgColor:(NSArray *)bottombgColor leftbtnbgColor:(NSArray *)leftbtnbgColor rightbtnbgColor:(NSArray *)rightbtnbgColor centerbtnColor:(NSArray *)centerbtnColor selectValueArry:(NSArray *)selectValueArry;
......
......@@ -16,6 +16,8 @@
if (self)
{
self.backArry=[[NSMutableArray alloc]init];
self.provinceArray=[[NSMutableArray alloc]init];
self.cityArray=[[NSMutableArray alloc]init];
self.selectValueArry=selectValueArry;
self.pickerDic=dic;
self.leftStr=leftStr;
......@@ -83,13 +85,6 @@
[self addSubview:self.pick];
self.pick.backgroundColor=[self colorWith:bottombgColor];
if (_Correlation) {
NSDictionary *dic=(NSDictionary *)self.value;
self.selectedDic =[dic objectForKey:[self.provinceArray objectAtIndex:0]];
}
}
//返回显示的列数
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
......@@ -194,106 +189,116 @@
//表示一个数组 特殊情况
return 110;
}else{
NSArray *arry=(NSArray *)self.value;
return SCREEN_WIDTH/arry.count;
return SCREEN_WIDTH/self.dataDry.count;
}
}
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if (!row) {
row=0;
}
[self.backArry removeAllObjects];
[self.infoArry removeAllObjects];
if (_Correlation) {
//这里是关联的
if ([_numberCorrela isEqualToString:@"three"]) {
if (component == 0)
{
NSDictionary *dic=(NSDictionary *)self.value;
NSInteger setline=[_pick selectedRowInComponent:0];
if (setline) {
self.selectedDic =[dic objectForKey:[self.provinceArray objectAtIndex:setline]];
}else{
self.selectedDic =[dic objectForKey:[self.provinceArray objectAtIndex:row]];
}
if ([_numberCorrela isEqualToString:@"three"]) {
if (self.selectedDic) {
self.cityArray = [self.selectedDic allKeys];
}
else
{
self.cityArray = nil;
}
if (self.cityArray.count > 0)
if (component == 0)
{
[self.cityArray removeAllObjects];
NSInteger oldrow=[self.pick selectedRowInComponent:1];
if (oldrow) {
NSInteger setline=[_pick selectedRowInComponent:0];
if (setline) {
self.townArray=[self.selectedDic objectForKey:[self.cityArray objectAtIndex:oldrow]];
self.selectthreeAry =[[self.dataDry objectAtIndex:setline]objectForKey:[self.provinceArray objectAtIndex:setline]];
}else{
row=0;
setline=0;
self.townArray=[self.selectedDic objectForKey:[self.cityArray objectAtIndex:row]];
self.selectthreeAry =[[self.dataDry objectAtIndex:0] objectForKey:[self.provinceArray objectAtIndex:0]];
}
if (self.selectthreeAry) {
//遍历数组
for (NSInteger i=0; i<self.selectthreeAry.count; i++) {
NSDictionary *dic=self.selectthreeAry[i];
NSArray *ary=[dic allKeys];
[self.cityArray addObject:[ary firstObject]];
}
}
else
{
self.cityArray = nil;
}
if (self.cityArray.count > 0)
{
self.townArray=[[self.selectthreeAry objectAtIndex:0]objectForKey:[self.cityArray objectAtIndex:0]];
}
else
{
self.townArray = nil;
}
[pickerView reloadAllComponents];
[pickerView selectRow:0 inComponent:1 animated:YES];
[pickerView selectRow:0 inComponent:2 animated:YES];
}
else
{
self.townArray = nil;
}
}
[pickerView selectedRowInComponent:1];
[pickerView reloadAllComponents];
[pickerView selectedRowInComponent:2];
if (component == 1)
{
if (self.selectedDic && self.cityArray.count > 0)
if (component == 1)
{
self.townArray=[self.selectedDic objectForKey:[self.cityArray objectAtIndex:row]];
}
else
{
self.townArray = nil;
NSInteger setline=[_pick selectedRowInComponent:0];
if (setline) {
self.selectthreeAry =[[self.dataDry objectAtIndex:setline]objectForKey:[self.provinceArray objectAtIndex:setline]];
NSLog(@"%@",_selectthreeAry);
self.townArray=[[self.selectthreeAry objectAtIndex:row]objectForKey:[self.cityArray objectAtIndex:row]];
}else{
setline=0;
self.selectthreeAry =[[self.dataDry objectAtIndex:0] objectForKey:[self.provinceArray objectAtIndex:0]];
//NSLog(@"%ld",(long)row);
self.townArray=[[self.selectthreeAry objectAtIndex:row]objectForKey:[self.cityArray objectAtIndex:row]];
}
[pickerView reloadAllComponents];
[pickerView selectRow:0 inComponent:2 animated:YES];
}
[pickerView selectRow:1 inComponent:2 animated:YES];
}
[pickerView reloadComponent:2];
}else if ([_numberCorrela isEqualToString:@"two"]){
if (component == 0)
{
NSDictionary *dic=(NSDictionary *)self.value;
self.selectArry =[dic objectForKey:[self.provinceArray objectAtIndex:row]];
}else if ([_numberCorrela isEqualToString:@"two"]){
if (self.selectArry.count>0) {
self.cityArray = self.selectArry;
}
else
if (component == 0)
{
self.cityArray = nil;
[self.cityArray removeAllObjects];
self.selectArry =[[self.dataDry objectAtIndex:row]objectForKey:[self.provinceArray objectAtIndex:row]];
if (self.selectArry.count>0) {
[self.cityArray addObjectsFromArray:self.selectArry];
}
else
{
self.cityArray = nil;
}
}
[pickerView reloadComponent:1];
[pickerView selectRow:0 inComponent:1 animated:YES];
}
[pickerView selectedRowInComponent:1];
[pickerView reloadComponent:1];
}
}
//返回选择的值就可以了
......@@ -310,30 +315,33 @@
[self.backArry addObject:c];
}else if ([_numberCorrela isEqualToString:@"two"]){
NSString *a=[self.provinceArray objectAtIndex:[self.pick selectedRowInComponent:0]];
NSString *b=[self.cityArray objectAtIndex:[self.pick selectedRowInComponent:1]];
NSLog(@"%@---%@",a,b);
// NSLog(@"%@---%@",a,b);
[self.backArry addObject:a];
[self.backArry addObject:b];
}
}else
{
if (_noArryElementBool) {
[self.backArry addObject:[self.noCorreArry objectAtIndex:row]];
}else{
//无关联的,直接给三个选项就行
for (NSInteger i=0; i<self.noCorreArry.count; i++) {
NSArray *eachAry=self.noCorreArry[i];
[self.backArry addObject:[eachAry objectAtIndex:[self.pick selectedRowInComponent:i]]];
}else{
//无关联的,直接给三个选项就行
for (NSInteger i=0; i<self.noCorreArry.count; i++) {
NSArray *eachAry=self.noCorreArry[i];
[self.backArry addObject:[eachAry objectAtIndex:[self.pick selectedRowInComponent:i]]];
}
}
}
}
NSMutableDictionary *dic=[[NSMutableDictionary alloc]init];
......@@ -346,74 +354,105 @@
-(void)getStyle
{
self.value=[self.pickerDic objectForKey:@"pickerData"];
self.dataDry=[self.pickerDic objectForKey:@"pickerData"];
id firstobject=[self.dataDry firstObject];
if ([self.value isKindOfClass:[NSArray class]]) {
if ([firstobject isKindOfClass:[NSArray class]]) {
_Correlation=NO;
}else if ([self.value isKindOfClass:[NSDictionary class]]){
}else if ([firstobject isKindOfClass:[NSDictionary class]]){
//_Correlation为YES的话是关联的情况 为NO的话 是不关联的情况
_Correlation=YES;
NSDictionary *dic=(NSDictionary *)self.value;
NSDictionary *dic=(NSDictionary *)firstobject;
NSArray *dicValue=[dic allValues];
NSArray * twoOrthree=[dic allKeys];
id fistObjct=[dicValue firstObject];
if ([fistObjct isKindOfClass:[NSDictionary class]]) {
id scendObjct=[[dic objectForKey:[twoOrthree firstObject]] firstObject];
if ([scendObjct isKindOfClass:[NSDictionary class]]) {
_numberCorrela=@"three";
}else if ([fistObjct isKindOfClass:[NSArray class]]){
}else{
_numberCorrela=@"two";
}
}
}
-(void)getnumStyle{
if (_Correlation) {
//这里是关联的
if ([_numberCorrela isEqualToString:@"three"]) {
//省 市
NSDictionary *dic=(NSDictionary *)self.value;
self.provinceArray = [dic allKeys];
if (self.provinceArray.count > 0) {
//这里是关联的
if ([_numberCorrela isEqualToString:@"three"]) {
//省 市
for (NSInteger i=0; i<self.dataDry.count; i++) {
NSDictionary *dic=[self.dataDry objectAtIndex:i];
NSArray *ary=[dic allKeys];
[self.provinceArray addObject:[ary firstObject]];
}
self.cityArray = [[dic objectForKey:[self.provinceArray objectAtIndex:0]] allKeys];
}
if (self.cityArray.count > 0) {
NSDictionary *dic=[self.dataDry firstObject];
NSArray *ary=[dic objectForKey:[self.provinceArray objectAtIndex:0]];
if (self.provinceArray.count > 0) {
for (NSInteger i=0; i<ary.count; i++) {
NSDictionary *dic=[ary objectAtIndex:i];
NSArray *ary=[dic allKeys];
[self.cityArray addObject:[ary firstObject]];
}
}
self.townArray = [[dic objectForKey:[self.provinceArray objectAtIndex:0]] objectForKey:[self.cityArray objectAtIndex:0]];
if (self.cityArray.count > 0) {
NSDictionary *dic=[ary firstObject];
self.townArray=[dic objectForKey:[self.cityArray firstObject]];
}
}else if ([_numberCorrela isEqualToString:@"two"]){
for (NSInteger i=0; i<self.dataDry.count; i++) {
NSDictionary *dic=[self.dataDry objectAtIndex:i];
NSArray *ary=[dic allKeys];
[self.provinceArray addObject:[ary firstObject]];
}
[self.cityArray addObjectsFromArray:[[self.dataDry objectAtIndex:0] objectForKey:[self.provinceArray objectAtIndex:0]]];
}
}else if ([_numberCorrela isEqualToString:@"two"]){
NSDictionary *dic=(NSDictionary *)self.value;
}else
{
//这里是不关联的
self.noCorreArry=self.dataDry;
self.provinceArray = [dic allKeys];
id noArryElement=[self.dataDry firstObject];
self.cityArray=[dic objectForKey:[self.provinceArray objectAtIndex:0]];
if ([noArryElement isKindOfClass:[NSArray class]]) {
_noArryElementBool=NO;
}else{
//这里为yes表示里面就就一行数据 表示的是只有一行的特殊情况
_noArryElementBool=YES;
}
}
}else
{
//这里是不关联的
self.noCorreArry=(NSArray *)self.value;
id noArryElement=[self.noCorreArry firstObject];
if ([noArryElement isKindOfClass:[NSArray class]]) {
_noArryElementBool=NO;
}else{
_noArryElementBool=YES;
}
}
}
//按了取消按钮
......@@ -475,14 +514,13 @@
{
if (_Correlation) {
//关联的一开始的默认选择行数
NSDictionary *dic=(NSDictionary *)self.value;
if ([_numberCorrela isEqualToString:@"three"]) {
[self selectValueThree:dic];
[self selectValueThree];
}else if ([_numberCorrela isEqualToString:@"two"]){
[self selectValueTwo:dic];
[self selectValueTwo];
}
}else{
//一行的时候
......@@ -490,23 +528,34 @@
}
}
//三行时候的选择哪个的逻辑
-(void)selectValueThree:(NSDictionary *)dic
-(void)selectValueThree
{
NSString *selectStr=[NSString stringWithFormat:@"%@",self.selectValueArry.firstObject];
for (NSInteger i=0; i<self.provinceArray.count; i++) {
NSString *str=[NSString stringWithFormat:@"%@",[self.provinceArray objectAtIndex:i]];
if ([selectStr isEqualToString:str]) {
_num=i;
[_pick selectRow:i inComponent:0 animated:NO];
break;
}
}
NSArray *selecityAry = [[dic objectForKey:selectStr] allKeys];
NSArray *selecityAry = [[self.dataDry objectAtIndex:_num] objectForKey:selectStr];
if (selecityAry.count>0) {
self.cityArray=selecityAry;
[self.cityArray removeAllObjects];
for (NSInteger i=0; i<selecityAry.count; i++) {
NSDictionary *dic=selecityAry[i];
NSArray *ary=[dic allKeys];
[self.cityArray addObject:[ary firstObject]];
}
}
NSString *selectStrTwo;
......@@ -517,20 +566,21 @@
NSString *str=[NSString stringWithFormat:@"%@",[self.cityArray objectAtIndex:i]];
if ([selectStrTwo isEqualToString:str]) {
_threenum=i;
[_pick selectRow:i inComponent:1 animated:NO];
break;
}
}
NSDictionary *threeDic=[dic objectForKey:[self.selectValueArry firstObject]];
if (threeDic) {
self.selectedDic=threeDic;
if (selecityAry.count>0) {
if (self.selectValueArry.count>1) {
NSArray *arry =[threeDic objectForKey:[self.selectValueArry objectAtIndex:1]];
NSArray *arry =[[selecityAry objectAtIndex:_threenum] objectForKey:[self.selectValueArry objectAtIndex:1]];
if (arry.count>0) {
self.townArray=arry;
......@@ -552,10 +602,9 @@
}
}
[_pick reloadAllComponents];
}
//两行时候的选择哪个的逻辑
-(void)selectValueTwo:(NSDictionary *)dic
-(void)selectValueTwo
{
NSString *selectStr=[NSString stringWithFormat:@"%@",self.selectValueArry.firstObject];
......@@ -563,21 +612,30 @@
for (NSInteger i=0; i<self.provinceArray.count; i++) {
NSString *str=[NSString stringWithFormat:@"%@",[self.provinceArray objectAtIndex:i]];
if ([selectStr isEqualToString:str]) {
[_pick selectRow:i inComponent:0 animated:NO];
_num=i;
break;
}
}
if ([dic objectForKey:selectStr]) {
self.cityArray =[dic objectForKey:selectStr];
NSArray *twoArry=[[self.dataDry objectAtIndex:_num]objectForKey:selectStr];
if (twoArry&&twoArry.count>0) {
[self.cityArray removeAllObjects];
[self.cityArray addObjectsFromArray:twoArry];
}
NSString *selectTwoStr;
if (self.selectValueArry.count>1) {
selectTwoStr =[NSString stringWithFormat:@"%@",[self.selectValueArry objectAtIndex:1]];
}
for (NSInteger i=0; i<self.cityArray.count; i++) {
NSString *str=[NSString stringWithFormat:@"%@",[self.cityArray objectAtIndex:i]];
if ([selectTwoStr isEqualToString:str]) {
[_pick selectRow:i inComponent:1 animated:NO];
......@@ -585,6 +643,7 @@
break;
}
}
[_pick reloadAllComponents];
}
//一行时候的选择哪个的逻辑
......@@ -689,7 +748,7 @@
}
}else{
//无关联的,直接给个选项就行
//无关联的,直接给个选项就行
for (NSInteger i=0; i<self.noCorreArry.count; i++) {
NSArray *eachAry=self.noCorreArry[i];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment