diff --git a/vanke.xcodeproj/project.pbxproj b/vanke.xcodeproj/project.pbxproj
index fd1814b3d1c93f733b531c55c3f7e7d3557d4b6b..a411a5c34e801b0aff02de15161d84867d8154c5 100644
--- a/vanke.xcodeproj/project.pbxproj
+++ b/vanke.xcodeproj/project.pbxproj
@@ -4193,7 +4193,6 @@
 				C1D58B131BB1BC9200D297FE /* Frameworks */,
 				C1D58B141BB1BC9200D297FE /* Resources */,
 				5CBECAF0D12B43E974C62C13 /* Copy Pods Resources */,
-				C10990C61C62665B005B4319 /* Run Script */,
 			);
 			buildRules = (
 			);
@@ -4215,7 +4214,7 @@
 				TargetAttributes = {
 					C1D58B151BB1BC9200D297FE = {
 						CreatedOnToolsVersion = 7.0;
-						DevelopmentTeam = 2G3393EZPN;
+						DevelopmentTeam = W54V2VB863;
 					};
 				};
 			};
@@ -4479,20 +4478,6 @@
 			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n";
 			showEnvVarsInLog = 0;
 		};
-		C10990C61C62665B005B4319 /* Run Script */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			name = "Run Script";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "xcrun agvtool next-version -all";
-		};
 /* End PBXShellScriptBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
@@ -5032,7 +5017,7 @@
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 23;
+				CURRENT_PROJECT_VERSION = 105;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				ENABLE_NS_ASSERTIONS = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -5073,7 +5058,7 @@
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 23;
+				CURRENT_PROJECT_VERSION = 105;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
@@ -5109,6 +5094,7 @@
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = NO;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COMPRESS_PNG_FILES = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = NO;
 				GCC_PREFIX_HEADER = vanke/vanke.pch;
 				HEADER_SEARCH_PATHS = (
@@ -5122,6 +5108,7 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = 1;
+				VERSIONING_SYSTEM = "";
 			};
 			name = Release;
 		};
@@ -5132,8 +5119,9 @@
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CLANG_ENABLE_MODULES = NO;
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = NO;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				CODE_SIGN_IDENTITY = "iPhone Developer: Fanfan Cui (7S27LB84E2)";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Fanfan Cui (7S27LB84E2)";
+				COMPRESS_PNG_FILES = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = NO;
 				GCC_PREFIX_HEADER = vanke/vanke.pch;
 				HEADER_SEARCH_PATHS = (
@@ -5147,6 +5135,7 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE = "";
 				TARGETED_DEVICE_FAMILY = 1;
+				VERSIONING_SYSTEM = "";
 			};
 			name = Debug;
 		};
diff --git a/vanke/Info.plist b/vanke/Info.plist
index 8e3315205b8a33097b931886afeccf9a83ddf298..2465dd4b6f9179f5dbd11fbfa4b50502d2519265 100755
--- a/vanke/Info.plist
+++ b/vanke/Info.plist
@@ -21,7 +21,7 @@
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>23</string>
+	<string>104</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
 	<key>NSAppTransportSecurity</key>
diff --git a/vanke/model/VankeUserModel.h b/vanke/model/VankeUserModel.h
index c44224eb7d93e68d94d06486a21aff62890acae9..1bce0aea95a2e81b61cd4dd67320055536db05dd 100755
--- a/vanke/model/VankeUserModel.h
+++ b/vanke/model/VankeUserModel.h
@@ -27,4 +27,7 @@
 // 自动登录
 -(void) autoLogin;
 
+// 取消登录请求
+-(void) cancel;
+
 @end
diff --git a/vanke/model/VankeUserModel.m b/vanke/model/VankeUserModel.m
index 5aad46db2156a75fdebbf875f714876ff6b16ac2..7ef0381c1aa0a8e0dab1c6b23f73bfdd26a02391 100755
--- a/vanke/model/VankeUserModel.m
+++ b/vanke/model/VankeUserModel.m
@@ -64,9 +64,19 @@
         @normalize(api);
         @normalize(self);
         
+        [[VankeCommonModel sharedInstance] removeLoginInfo];
         self.serverResp = [LoginResponse initWith:NO message:nil == api.errorDesc? @"网络异常": api.errorDesc];
         [self sendUISignal:self.RELOADED];
     };
+    api.whenCancelled = ^{
+        @normalize(api);
+        @normalize(self);
+        
+        [[VankeCommonModel sharedInstance] removeLoginInfo];
+        self.serverResp = [LoginResponse initWith:NO message:nil == api.errorDesc? @"用户取消": api.errorDesc];
+        [self sendUISignal:self.RELOADED];
+    };
+
     [api send];
 }
 
@@ -90,4 +100,8 @@
     }
 }
 
+-(void) cancel {
+    [VankeUserLoginAPI cancel];
+}
+
 @end
diff --git a/vanke/view_iPhone/templates/login/VankeLoginBoard_iPhone.m b/vanke/view_iPhone/templates/login/VankeLoginBoard_iPhone.m
index 4d177bf40c22cb0d5d3b54bb1907a7b2ad32d316..1fff801725f25a180d1c9f2a081f10b0f4fd9261 100755
--- a/vanke/view_iPhone/templates/login/VankeLoginBoard_iPhone.m
+++ b/vanke/view_iPhone/templates/login/VankeLoginBoard_iPhone.m
@@ -50,6 +50,7 @@ ON_CREATE_VIEWS( signal )
     self.navigationBarShown = NO;
     [self addLeftIconToTextField:_txtUserName icon: @"user_icon"];
     [self addLeftIconToTextField:_txtPwd icon:@"pwd_icon"];
+    self.view.holdable = YES;
 }
 
 -(void) addLeftIconToTextField: (BeeUITextField*) textField icon: (NSString*) icon {
@@ -114,6 +115,7 @@ ON_SIGNAL3( VankeLoginBoard_iPhone, btnLogin, signal )
     [GEToast showProgress:self.view];
     [_btnLogin setTitle:@"登录中..." forState:UIControlStateSelected];
     [_model login:[self getUserName] password:[self getPassword]];
+    [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; // 隐藏键盘
 }
 
 ON_SIGNAL3( VankeLoginBoard_iPhone, txtUserName, signal )
@@ -134,17 +136,11 @@ ON_SIGNAL3( VankeLoginBoard_iPhone, txtPwd, signal )
     }
 }
 
-ON_SIGNAL3( VankeLoginBoard_iPhone, HOLD_START, signal ) {
+ON_SIGNAL3( UIView, HOLD_START, signal ) {
     NSLog(@"long press start");
+    [_model cancel];
 }
 
-ON_SIGNAL3( VankeLoginBoard_iPhone, HOLD_CANCEL, signal ) {
-    NSLog(@"long press cancel");
-}
-
-ON_SIGNAL3( VankeLoginBoard_iPhone, HOLD_STOP, signal ) {
-    NSLog(@"long press stop");
-}
 
 -(void) refreshLoginButtonStyle {
     BOOL disabled = [VankeUtil isBlankString:_txtPwd.text] || [VankeUtil isBlankString:_txtUserName.text];
diff --git a/vanke/view_iPhone/templates/main/VankeMainBoard_iPhone.m b/vanke/view_iPhone/templates/main/VankeMainBoard_iPhone.m
index 15a3a48feac655a0fac6fc7b9667921a51c363ee..9f37fd453008969f966c0b5d1756612cd141b2e7 100755
--- a/vanke/view_iPhone/templates/main/VankeMainBoard_iPhone.m
+++ b/vanke/view_iPhone/templates/main/VankeMainBoard_iPhone.m
@@ -53,8 +53,8 @@ ON_CREATE_VIEWS( signal )
     self.view.backgroundColor = [UIColor whiteColor];
 //    [self addLeftIconToTextField:_txtQuery icon:@"search"];
     [_weatherBoard reloadLocationAndWeather];
-    self.view.swipeDirection = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
     self.view.swipeble = YES;
+    self.view.swipeDirection = UISwipeGestureRecognizerDirectionLeft;
     
     //去掉搜索框背景
     float version = [[[ UIDevice currentDevice ] systemVersion ] floatValue ];
@@ -256,25 +256,14 @@ ON_SIGNAL3(VankeProjectSummaryModel, RELOADED, signal) {
     [self.stack pushBoard:board animated:YES];
 }
 
-//-(NSString*) today {
-//    NSDateFormatter *df = [[NSDateFormatter alloc] init];
-//    [df setDateFormat:@"yyyy-MM-dd"];
-//    return [df stringFromDate:[NSDate date]];
-//}
-
 #pragma VankeMainBoard_iPhone
 
-ON_SIGNAL3( VankeMainBoard_iPhone, SWIPE_LEFT, signal )
-{
-    if (_curTopMenuIndex > 0) {
-        [self showTab:_curTopMenuIndex - 1];
-    }
-}
-
-ON_SIGNAL3( VankeMainBoard_iPhone, SWIPE_RIGHT, signal )
-{
+ON_SWIPE_LEFT( signal ) {
     if (_curTopMenuIndex < 2) {
         [self showTab:_curTopMenuIndex + 1];
+    } else {
+        _curTopMenuIndex = -1;
+        [self showTab:_curTopMenuIndex + 1];
     }
 }