±¾Õ½«½éÉÜMonoTouchÈçºÎ½«iOS
SDK³éÏ󻯣¬´Ó¶ø¿ÉÒÔʹÓÃC#µÄÔÉúÀà½øÐпª·¢£¬»¹½éÉÜÈçºÎʹÓÃoutlet£¬²¢½«CocoaTouch DelegateÄ£ÐͺÍC#µÄʼþÄ£ÐͽøÐбȽϣ¬½²½âÈçºÎÔÚC#ÖÐʹÓÃÕâÁ½ÖÖģʽ¡£±¾Õ»¹½«½éÉÜObjective-CµÄÄÚ´æ¹ÜÀíÓëMonoTouchµÄÀ¬»ø»ØÊÕ»úÖÆÖ®¼äµÄÒìͬ¡£
ÏÂÃæÍ¨¹ýʾÀýÀ´ËµÃ÷ÉÏÃæ½²µ½µÄһЩ¸ÅÄî¡£Ç°ÃæÌáµ½µÄUIActionSheet½«»áÔÚʾÀýÖÐʹÓá£Í¨¹ýObjective-CÓëC#µÄ¶Ô±È£¬½«ÓÐÖúÓÚÇå³þµØÁ˽âÈçºÎʹÓÃMonoTouch¿ª·¢Ó¦ÓóÌÐò¡£
×¢Ò⡡ͨ³££¬Ê¹ÓÃMonoTouch¿ª·¢Ó¦ÓóÌÐò²»ÐèÒªXcode»òObjective-C£¬ÕâÀïÕâÑù×öµÄÄ¿µÄÊÇ×÷Ϊ»ù´¡ÖªÊ¶¸¨Öú˵Ã÷MonoTouchµÄÉè¼Æ¡£Èç¹ûÓÐÐËȤÏëÁ˽â¸ü¶àµÄÏà¹Ø¼¼Êõ£¬ÍƼöÔĶÁStephen
G. KochanдµÄ¡¶Programming in Objective-C 2.0¡·¡£
ʾÀý½«»áÈçͼ2-2Ëùʾ£¬ÔÊÐí¸Ä±äÓ¦ÓóÌÐòµÄ±³¾°Í¼Æ¬¡£

ͼ2-2¡¡Ó¦ÓóÌÐòÔËÐÐʱ¸Ä±äËüµÄ±³¾°Í¼Æ¬
2.2.1¡¡´ÓXcode¿ªÊ¼±àдӦÓóÌÐò
Ê×ÏÈʹÓÃXcode´´½¨Ê¾ÀýÓ¦ÓóÌÐò¡£ÔÚ¿ª·¢Ê±£¬¿ÉÒÔ½è¼øÖ®Ç°Ê¹ÓÃMonoDevelop¿ª·¢Ó¦ÓóÌÐòʱµÄ²½Ö裬²¢¶Ô±ÈËüÃÇÖ®¼äµÄ²»Í¬¡£´ò¿ªXcode²¢´´½¨Ò»¸öÃûΪLMT2-1µÄ»ùÓÚ´°¿ÚµÄÓ¦ÓóÌÐò¡£ÔÚIBÖÐË«»÷MainWindow.xibÎļþ´ò¿ªËü¡£Èçͼ2-3Ëùʾ£¬ÔÚIBÖн«Library´°¿ÚÖеÄUIImageViewÍϵ½¸Ã´°¿Ú¡£UIImageView½«ÓÃÀ´ÏÔʾ±³¾°Í¼Æ¬£¬ÒòΪҪÔÚ´úÂëÖиı䱳¾°Í¼Æ¬£¬ËùÒÔÐèҪΪËü´´½¨Ò»¸öoutlet¡£

ͼ2-3¡¡ÔÚIBÖÐÌí¼ÓUIImageView
IBÖÐÒªÁ¬½ÓµÄoutletÔÚObjective-CµÄÍ·ÎļþÖж¨Ò壬ÉÔºóÒªÔÚXcodeÖнøÐÐÌí¼Ó¡£²»¹ý£¬ÔÚÌí¼Ó֮ǰ£¬ÏÈÒªÔÚIBÖÐÍê³É½çÃæÉè¼Æ£¬½«Ò»¸ö°´Å¥ÍϷŵ½Í¼Æ¬ÊÓͼµÄ¶¥²¿¡£
×¢Òâ¡¡°´Å¥Í¨³£ÓëUIBarButtonItemÒ»Æð·ÅÔÚUIToolbarÄÚ¡£
°´Å¥µÄ×÷ÓÃÊÇ´ò¿ªUIActionSheet£¬È»ºóÔÚUIActionSheetÖÐÇл»Í¼Æ¬ÊÓͼÖеÄͼƬ¡£Òª½«ÏìÓ¦°´Å¥´¥Åö¶¯×÷µÄ´¦Àí´úÂëÓë°´Å¥Á¬½ÓÆðÀ´£¬ÐèÒªÔÚÍ·Îļþ¶¨ÒåÒ»¸ö²Ù×÷¡£ÔÚXcode¶¨ÒåºÃÕâЩ֮ºó£¬·µ»ØIBÖнøÐÐÁ¬½Ó¡£ÏÖÔÚ£¬»Øµ½Xcode¡£
ÔÚXcodeÖУ¬Ñ¡ÔñAppDelegateµÄÍ·Îļþ£¨LMT2_1AppDelegate.h£©£¬È»ºóÔÚÎļþÀïÌí¼Ó´úÂëÇåµ¥2-1ÖеĴúÂë¡£
´úÂëÇåµ¥2-1¡¡Objective-CÍ·ÎļþÖеÄOutletºÍAction
#import <UIKit/UIKit.h> @interface LMT2_1AppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; UIImageView *imageView; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UIImageView *imageView; -(IBAction) changePicture: (id) sender; @end |
´úÂëÖÐΪUIImageViewÔö¼ÓÁËÒ»¸ö³ÆÎªimageViewµÄʵÀý±äÁ¿£¬²¢Ê¹ÓÃ@propertyÖ¸ÁîÉùÃ÷ËüÊÇIBOutlet£¬ÕâÑùÔÚxibÎļþÖУ¬IB¾Í¿ÉÒÔʹÓÃÕâ¸öʵÀý±äÁ¿À´Á¬½ÓͼƬÊÓͼ¡£
×¢Òâ¡¡IBOutletÖ»ÊÇÒ»¸ö¿ÕµÄºê£¬²»ÐèҪΪËü±àд´úÂ룬ËüµÄÖ÷Òª×÷ÓÃÊÇÓëIB¼¯³É¡£Í¬Ñù£¬IBActionÒ²²»»áÓзµ»ØÖµ£¬ËüÖ»ÊÇ×÷ΪIBµÄÒ»¸öÌáʾ¡£
»¹ÐèÒªÔÚÍ·ÎļþÖж¨Ò嶯×÷£¬ÒÔ±ãÔÚIBÖÐÁ¬½Ó°´Å¥µÄ´¥Åöʼþ¡£´ËÍ⣬ÔÚÀ¨ºÅÖж¨ÒåµÄ¿ÉÑ¡²ÎÊý£¨nonatomicºÍretain£©£¬»áÈñàÒëÆ÷¸ù¾ÝÄÚ´æ¹ÜÀíÆ÷ºÍÏß³ÌÀ´Éú³Éʵ¼ÊµÄÊôÐÔ¡£¿ÉÒÔ¿´µ½£¬ÕâÀïȷʵûÓÐÊôÐÔ£¬ËüÖ»ÊÇÎ§ÈÆgetterºÍsetter·½·¨µÄ¡°ÌÇÒÂÓï·¨¡±£¨syntactic
sugar£©¡£Íê³ÉXcodeµÄ´úÂëºó£¬×ªµ½ÊµÏÖÎļþ£¨LMT2_1AppDelegate.m£©Ìí¼ÓÊôÐԺͶ¯×÷·½·¨µÄ´úÂë¡£
ÁíÒ»°ëµÄObjective-CÊôÐÔÐèҪʹÓÃ@synthesizeÖ¸ÁÔÚʵÏÖÎļþÌí¼Ó¸ÃÖ¸Áîºó£¬±àÒëÆ÷»áÔÚÍ·ÎļþÖÐÉú³ÉÊôÐԵ͍Òå¡£ÉÔºóÔÚʹÓÃMonoTouchʵÏִ˹ý³ÌµÄʱºò£¬»á·¢ÏÖMonoTouch¸ü¼òµ¥¡¢¸ü±ã½Ý¡£ÏÖÔÚ¿ªÊ¼Ìí¼ÓÊôÐԺͷ½·¨¡£
ÔÚLMT2_1AppDelegate.mÎļþÖУ¬ÔÚXcodeÄ£°åÒÑÓеĴ°¿ÚÓï¾äÏÂÌí¼ÓimageViewµÄSynthesizeÓï¾ä¡£´ËÍ⣬Ìí¼ÓchangePicture:·½·¨£¬²¢ÔÚ·½·¨ÄÚÌí¼ÓÈç´úÂëÇåµ¥2-2ÖÐËùÁгöµÄ¼Ç¼×Ö·û´®µÄ´æ¸ùʵÏÖ¡£Òª¼Çס£¬¶Ô±àÒëÆ÷À´Ëµ£¬IBActionÊÇûÓзµ»ØÖµµÄ¡£ÔÚ½éÉÜUIActionSheetµÄʱºò£¬»¹Òª»Øµ½ÕâÀïµÄʵÏÖ²Ù×÷¡£ÏÖÔÚ£¬±£´æXcodeÖеÄÎļþºó£¬Çл»»ØIBÖеÄMainWindow.xib¡£
´úÂëÇåµ¥2-2¡¡LMT2_AppDelegate.m
#import "LMT2_1AppDelegate.h" @implementation @synthesize window; @synthesize imageView; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch [window makeKeyAndVisible]; return YES; } -(IBAction) changePicture: (id) sender{ NSLog(@"placeholder for UIActionSheet code"); } - (void)dealloc { [window release]; [imageView release]; [super dealloc]; } |
ÔÚIBÖУ¬ÏÖÔÚÒª½«outletÁ¬½Óµ½imageView£¬ÕâÑù²Å¿ÉÒÔÔÚAppDelegateÀàÖÐͨ¹ý´úÂë¸Ä±ä±³¾°Í¼Æ¬¡£»¹ÒªÉèÖÃTarget-Action£¬ÕâÑù²ÅÄÜÔÚ´¥Åö°´Å¥µÄʱºòµ÷ÓÃchangePicture:·½·¨¡£ÏÖÔÚ¿ªÊ¼Íê³ÉÕâЩ²½Ö裬ҪעÒâÇø·ÖXcodeºÍObjective-CÓëMonoTouchÖ®¼äµÄ²»Í¬¡£
Ê×ÏÈ£¬½«AppDelegateµÄimageViewµÄoutletÁ¬½Óµ½xibÖеÄUIImageView¡£Èçͼ2-4Ëùʾ£¬ÔÚMainWindow.xibºÍConnections
InspectorÖÐÑ¡ÔñAppDelegate£¬È»ºó½«imageView outletÍϵ½´°¿ÚµÄUIImageViewÖС£

ͼ2-4¡¡½«imageViewµÄoutletÁ¬½Óµ½UIImageView
½Ó×Å£¬ÐèÒªÁ¬½ÓµÄÊÇAppDelegate´úÂëÖд´½¨µÄchangePicture:·½·¨¡£ÕâÊÇÇ°Ãæ½²¹ýµÄTarget-ActionģʽµÄÒ»¸öÀý×Ó¡£µ±ÔÚMonoTouchÖÐʵÏÖÕâЩ¹¦ÄÜʱ£¬»á¿´µ½ÔÚC#ÖÐÊÇÈçºÎʹÓö¯×÷¼°ÈçºÎ½«´úÂëÁ¬½Óµ½C#·ç¸ñµÄʼþµÄ¡£Òª½«Objective-CµÄ´¦Àí´úÂëÁ¬½Óµ½°´Å¥ÉϵÄʼþ£¬ÏÈÔÚMainWindow.xibÖÐÑ¡Ôñ¸Ã°´Å¥£¬È»ºóÔÚConnections
InspectorÖн«TouchUpInsideʼþÍϵ½AppDelegate¡£µ±ËÉ¿ªÊó±ê°´Å¥£¬IB»áµ¯³öÒ»¸ö°üº¬ËùÓÐʹÓÃIBActionÉùÃ÷µÄ·½·¨²Ëµ¥¡£´ËʱÕâ¸ö²Ëµ¥ÖÐÖ»ÓÐÒ»¸öchangePicture:·½·¨¡£Ñ¡ÔñchangePicture£¬×¢ÒâÔÚConnections
InspectorÖУ¬°´Å¥µÄTouchUpInsideʼþÓëÄ¿±êÀàAppDelegateÖеÄchangePicture:¶¯×÷½¨Á¢ÁËÁ¬½Ó¡£±£´æºó£¬ÔÚXcodeÖÐÔËÐÐÓ¦ÓóÌÐò¡£
Ó¦ÓóÌÐòÔËÐк󣬴ÓXcodeÔËÐе÷ÊÔÆ÷¿ØÖÆÌ¨£¨Run¡úConsole£©¡£ÔÚ´¥ÅöÓ¦ÓóÌÐòµÄ°´Å¥ºó£¬»áÔÚ¿ØÖÆÌ¨¿´µ½Èçͼ2-5ËùʾµÄÈÕÖ¾ÐÅÏ¢¡£

ͼ2-5¡¡µ÷ÊÔÆ÷¿ØÖÆÌ¨ÏÔʾµÄchangePicture:·½·¨ÖеÄÈÕÖ¾´úÂë
ÏÖÔÚÒѾͨ¹ýObjective-CµÄTarget-ActionģʽÁ¬½ÓÁËʼþ£¬ÏÂÒ»²½Òª×öµÄÊÇʹÓÃMonoDevelopʵÏÖͬÑùµÄ¹¦ÄÜ¡£
2.2.2¡¡ÔÚMonoTouchÖÐʵÏÖÏàͬµÄ¹¦ÄÜ
ÏÖÔÚ£¬ÁôÒâÒ»ÏÂMonoTouchÊÇÈçºÎʹÓÃC#µÄ·½Ê½ÊµÏÖʼþÏìÓ¦µÄTarget-ActionģʽµÄ¡£´ò¿ªMonoDevelop²¢´´½¨Ò»¸öÃûΪLMT2-2µÄ»ùÓÚiPhone´°¿ÚµÄй¤³Ì¡£ÔÚIBÖдò¿ªMainWindow.xib£¬Ìí¼ÓÒ»¸öUIImageViewºÍÒ»¸ö°´Å¥£¬Ð޸İ´Å¥ÉϵÄÎı¾Îª¡°Change
Image¡±¡£ÏÖÔÚҪΪͼƬÊÓͼÌí¼ÓÒ»¸öoutletÒÔ±ã´úÂë¿ÉÒÔ·ÃÎʵ½Ëü£¬Òò´ËÔÚ´ËÁ¢¼´´´½¨Õâ¸öoutlet¡£ÒòΪÊÇÓÉAppDelegateµÄ´úÂë·ÃÎÊÕâ¸öoutlet£¬ËùÒÔÒªÔÚAppDelegateÖÐÌí¼ÓÕâ¸öoutlet¡£ÔÚLibrary´°¿ÚºÍIBµÄ±êǩҳÄÚÔÙ´ÎÑ¡ÔñAppDelegate£¬ÔÚOutletsÇøÓòÄÚÌí¼ÓÒ»¸öÃûΪimageViewµÄoutlet£¬ÐÞ¸ÄËüµÄÀàÐÍΪUIImageView¡£
×¢Òâ¡¡MonoTouchÖеÄUIKit°æ±¾ºÍ»ù´¡¼Ü¹¹·Ö±ð°üº¬ÔÚÃüÃû¿Õ¼äMonoTouch.UIKitºÍMonoTouch.FoundationÖС£
ÔÚObjective-CÖУ¬ÊÇÔÚAppDelegateµÄÍ·ÎļþÖÐÌí¼ÓoutletµÄ£¬¶øÔÚMonoTouchÖУ¬Ò»µ©xibÎļþÖеĶÔÏó£¨ÈçUIImageViewʵÀý£©ºÍoutletÖ®¼ä½¨Á¢Á¬½Ó£¬¾Í»áͨ¹ýÔÚ¾Ö²¿ÀàÖÐÉú³ÉµÄÊôÐÔ½«outletÁ¬½Óµ½´úÂë¡£ÊôÐÔÓÃConnectAttribute½øÐÐÉùÃ÷£¬ËüµÄ×÷ÓÃÓëObjective-CÖеÄIBOutletÒ»Ñù£¬¼´ÓëIB¼¯³É¡£
ÏÖÔÚ£¬ÔÚMainWindow.xib´°¿ÚÖÐÑ¡ÔñAppDelegate£¬Èç֮ǰ×ö¹ýµÄÒ»Ñù£¬½«imageViewµÄoutletÁ¬½Óµ½ÔÚ´°¿ÚÖеÄUIImageView¡£Èç¹ûÔÚIBÖб£´æÎļþºó£¬Çл»µ½MonoDevelopÖв鿴MainWindow.xib.designer.csÎļþ£¬¾Í»á¿´µ½¾Ö²¿ÀàºÍ¸Õ²ÅÌá¼°µÄÊôÐÔ¡£ÏÖÔÚ£¬Á¬½Ó°´Å¥¡£
µÚ1ÕÂÑÝʾÁËÈçºÎʹÓÃC#·ç¸ñµÄʼþÀ´Á¬½ÓUIButtonʼþ¡£ÏÖÔÚ¿ÉÒÔÊÔ×ÅʹÓÃÓë¸Õ²ÅÔÚObjective-CÖÐʹÓõÄTarget-AcitonģʽÀ´´ïµ½ÏàͬµÄЧ¹û¡£Òª¼Çס£¬Ä¿±êÊÇAppDelegate£¬ÒªÔÚAppDelegateÖд´½¨¶¯×÷·½·¨À´ÏìÓ¦°´Å¥µÄTouchUpInsideʼþ¡£ÀûÓÃMonoDevelopÓëIB¼¯³É£¬¿ÉÒÔ´ïµ½ÏàͬµÄЧ¹û¡£ÔÚIBµÄLibrary´°¿ÚÖУ¬Ñ¡ÔñAppDelegateµÄActions±êÇ©£¨ÔÚOutlets±êǩҳµÄÓұߵÚÒ»¸ö£©£¬Óá°changePicture:¡±Ñ¡ÔñÆ÷Ìí¼ÓÒ»¸ö¶¯×÷¡£È»ºó£¬Ñ¡Ôñ´°¿ÚÖеİ´Å¥£¬½«Connections
InspectorÖеÄTouch Up InsideʼþÍϵ½MainWindow.xibÖеÄAppDelegateÉϽøÐÐÁ¬½Ó¡£ËÉ¿ªÊó±ê£¬µ¯³öÒ»¸ö֮ǰÔÚXcodeºÍIBÖгöÏÖ¹ýµÄchangePicture:Ñ¡ÔñÆ÷²Ëµ¥¡£Ñ¡ÔñchangePicture:Ñ¡ÔñÆ÷£¬²¢ÔÚIBÖб£´æËùÓÐÐ޸ġ£Èç¹û»ØÍ·¿´¿´ÔÚMainWindow.xib.designer.csÎļþÖеľֲ¿À࣬¾Í»á¿´µ½Ð´úÂëÒÑÌí¼Ó£¬ExportAttributeÉùÃ÷µÄ×÷ÓÃÊǽ«IBÖÐÌí¼ÓµÄ¶¯×÷´¦Àí´úÂë¹Ò½Óµ½changePictureÑ¡ÔñÆ÷¡£ÏÖÔÚÌí¼ÓʵÏÖ´úÂ루ÀàËÆÕ¼Î»·ûµÄ´úÂ룬ºóÃæ½«»áÌæ»»ÎªUIActionSheet£©¡£ÔÚMain.csÎļþÖУ¬Ìí¼ÓÒÔÏ´úÂëµ½AppDelegateÀࣺ
¡¶ÕâÀïÓеãÒªÌØ±ð˵Ã÷µÄµØ·½¡· |
ÔËÐÐÓ¦ÓóÌÐò²¢´¥Åö°´Å¥£¬½«»á¿´µ½Ð´ÔÚMonoDevelopÖеÄApplication
Output±êǩҳÖеÄÎı¾ÐÅÏ¢£¨Èçͼ2-6Ëùʾ£©¡£

ͼ2-6¡¡MonoDevelopÖÐApplication
Output±êǩҳÏÔʾµÄ°´Å¥Ê¼þµÄÔËÐнá¹û
Ìáʾ¡¡Ê¹ÓÃC#ʼþ¿ÉÒÔ±ÜÃâ²»±ØÒªµÄ¶¯×÷¡£¾ÍÈçµÚ1ÕÂËù¿´µ½µÄ£¬ÕâÑù×öµÄºÃ´¦ÊÇ£¬¿ÉÒÔʹÓÃC#·ç¸ñµÄʼþÀ´ÊµÏÖ£¬´Ó¶ø±ÜÃâʹÓö¯×÷·½·¨À´ÊµÏÖ¡£Ö»ÐèҪΪ°´Å¥´´½¨Ò»¸öoutlet¾Í¿Éͨ¹ý³ÌÐò·ÃÎÊ×¢²áµÄʼþ¡£MonoTouchÖ§³Ö´´½¨C#ʼþίÍеÄÏÔʽ»Øµ÷·½·¨£¬ÒÔ¼°ÄäÃû·½·¨ºÍlambda±í´ïʽ¡£
ÕýÈçËù¿´µ½µÄ£¬MonoTouch¿ÉÒÔʹÓÃÓëObjective-CÏàͬµÄģʽʵÏÖʼþ´¦Àí¡£´ËÍ⣬MonoTouchÌṩÁ˸üÁé»îµÄC#·ç¸ñµÄʼþÒÔ¹©Ñ¡Ôñ¡£
ÏÖÔÚÒª×öµÄÊÇΪUIActionSheet±àÂëÒԸıäͼƬ¡£»¹ÊÇÏÈͨ¹ýXcodeʵÏÖ£¬È»ºóÔÙͨ¹ýMonoTouchʵÏÖ£¬ÒԱȽÏÁ½ÕßÔÚʵÏÖObjective-CίÍÐģʽ֮¼äµÄ²»Í¬¡£²»¹ý£¬ÔÚʵÏÖ֮ǰ£¬ÒªÏÈ»¨µãʱ¼äÁ˽âMonoTouchÊÇÈçºÎʵÏÖAppDelegateºÍÈçºÎ´¦ÀíËüµÄ¡£
2.2.3¡¡AppDelegateʵÏֵıȽÏ
ÔÚ±¾Êéǰ¼¸Õµļòµ¥Ê¾ÀýÖУ¬»¹²»ÄܶÔÓ¦ÓóÌÐò½øÐнṹ»¯Éè¼Æ£¬Õ⽫ÔÚµÚ3Õ½øÐн²Êö¡£È»¶ø£¬ÔÚ¿ª·¢Ó¦ÓóÌÐòÖÐ×Ü»áÓõ½AppDelegate¡£ÔÚĿǰµÄʾÀýÖУ¬ËùÓеÄÓ¦ÓóÌÐò´úÂë¶¼ÊÇÔÚËüÄÚ²¿Ìí¼ÓµÄ£¬Êµ¼ÊÉÏËüµÄ×÷ÓÃÊÇͨ¹ýÆäËûÀàÀ´´¦ÀíÓ¦ÓóÌÐòÂß¼¡£AppDelegateÊÇÒ»¸öÔÚÓ¦ÓóÌÐòµÄÉúÃüÖÜÆÚÄÚÓÃÀ´ÏìÓ¦UIApplication¸÷Àà²Ù×÷²¢½øÐд¦ÀíµÄÀ࣬ÕâЩ´¦Àí°üÀ¨Ó¦ÓóÌÐòÖÕÖ¹¡¢Ó¦ÓóÌÐòÆô¶¯Íê³É¡¢½ÓÊÕϵͳ·¢³öµÄÄڴ澯¸æµÈ¡£ÔÚObjective-CÖУ¬AppDelegate¶¨ÒåΪһ¸öÃûΪUIApplicationDelegateµÄÐÒé¡£¼ÇסObjective-CÐÒé»ù±¾ÀàËÆÓÚC#½Ó¿Ú£¬³ýÁËһЩ·½·¨Ö¸¶¨Îª¿ÉÑ¡µÄÍâ¡£Èç¹û´ò¿ªXcodeÖеÄLMT2_1AppDelegate.hÎļþ£¬»á¿´µ½ÒÔÏ´úÂ룺
¡¶ÕâÀïÓеãÒªÌØ±ð˵Ã÷µÄµØ·½¡· |
ÕâÊÇObjective-CÔÚÏà¹ØLMT2_1AppDelegate.mÎļþÖÐʵÏÖLMT2_1AppDelegateÀඨÒåµÄ·½Ê½£¬ËüÅÉÉúÓÚNSObject£¨CocoaTouchÖÐÆäËûÀàµÄ»ùÀ࣬ÀàËÆÓÚ.NETÖеÄObjectÀࣩ²¢×ñÑUIApplicationDelegateÐÒé¡£ÕâÒâζ×ÅʵÏÖ½«°üº¬ÐÒéµÄËùÓÐÇëÇó·½·¨ÒÔ¼°¿ÉÑ¡·½·¨¡£ÕâÊÇÔÚLMT2_AppDelegate.mÎļþÖÐʵÏֵķ½·¨application:didFinishLaunchingWithOptions:£¬Ó¦ÓóÌÐòÍê³ÉÆô¶¯ºó»áµ÷Óø÷½·¨¡£ÓëMonoTouch½øÐбȽϣ¬¾Í»á·¢ÏÖAppDelegateÊÇ×÷Ϊһ¸öÀàʵÏֵġ£Èç¹û×÷Ϊ½Ó¿ÚʵÏÖ£¬ÄǻṤ×÷²»ÁË£¬ÒòΪËü²»Äܸø¿ÉÑ¡·½·¨¸½¼ÓÐÒéÀàÐÍ£¬Òò¶øËü±ØÐëʵÏÖΪһ¸öÈç´úÂëÇåµ¥2-3ËùʾµÄ°üº¬¸÷ÖÖÐ麯ÊýµÄÀà¡£Õâ¾ÍÊÇÔÚMonoTouchÖп´µ½µÄģʽ£¬½«Objective-CÐÒéת»»ÎªÅÉÉúÓÚ»ùÀàµÄÀ࣬²¢Í¨¹ýÖØÐ´Ð麯Êý²åÈëʵÏÖ´úÂë¡£
´úÂëÇåµ¥2-3¡¡MonoTouch AppDelegateÀà
[Register("UIApplicationDelegate")] [Model()] public class UIApplicationDelegate : NSObject { // Constructors public UIApplicationDelegate(); public UIApplicationDelegate(NSCoder coder); public UIApplicationDelegate(NSObjectFlag t); public UIApplicationDelegate(IntPtr handle); // Methods public virtual void FinishedLaunching(UIApplication application); public virtual bool FinishedLaunching(UIApplication application, NSDictionary launchOptions); public virtual void OnActivated(UIApplication application); public virtual void OnResignActivation( UIApplication application); public virtual void HandleOpenURL(UIApplication application, NSUrl url); public virtual void ReceiveMemoryWarning( UIApplication application); public virtual void WillTerminate(UIApplication application); public virtual void ApplicationSignificantTimeChange( UIApplication application); public virtual void WillChangeStatusBarOrientation( UIApplication application, UIInterfaceOrientation newStatusBarOrientation, double duration); public virtual void DidChangeStatusBarOrientation( UIApplication application, UIInterfaceOrientation oldStatusBarOrientation); public virtual void WillChangeStatusBarFrame( UIApplication application, RectangleF newStatusBarFrame); public virtual void ChangedStatusBarFrame( UIApplication application, RectangleF oldStatusBarFrame); public virtual void RegisteredForRemoteNotifications( UIApplication application, NSData deviceToken); public virtual void FailedToRegisterForRemoteNotifications( UIApplication application, NSError error); public virtual void ReceivedRemoteNotification( UIApplication application, NSDictionary userInfo); ... } |
×¢Òâ¡¡ËùÓÐÓÐExportAttribute¶¨ÒåµÄ·½·¨£¬ÔÚÖØÐ´Ð麯Êýʱ£¬²»ÐèÒªÖªµÀʵ¼ÊµÄÑ¡ÔñÆ÷»òÌṩÊôÐÔ¡£
ÕýÈçÇ°ÃæËù¿´µ½µÄ£¬ÔÚMonoTouchµÄʵÏÖÖУ¬MonoDevelopºÍIBÖ®¼äÏà½áºÏ²úÉúµÄËùÓдúÂë¶¼½áÊøÔÚÒ»¸ö¾Ö²¿ÀඨÒåÖУ¬ÕâΪʵÏÖÓ¦ÓóÌÐò´úÂëÌṩÁ˺ܴóµÄ×ÔÓɶȣ¬ÎÞÐëʹÓù¤¾ß½Ó¿Ú¡£¼Ì³ÐµÄ²ã´Î½á¹¹¿ÉÓÉ¿ª·¢ÈËÔ±ÔÚ¾Ö²¿ÀඨÒåÖÐ×ÔÐÐÉèÖá£ÔÚAppDelegateµÄÇé¿öÏ£¬MonoDevelop´úÂëÄ£°å´ÓUIApplicationDelegateÅÉÉú³öAppDelegate£¬ÔÚMain.csÎļþÖУ¬´úÂëÈçÏ£º
public partial class AppDelegate : UIApplicationDelegate |
Ä£°å»¹ÖØÐ´ÁËFinishedLaunching·½·¨£¬ÕâÀï¿ÉÒÔʵÏÖ֮ǰÔÚObjective-CʵÏֵ썾ÍÏñÇ°ÃæÔÚXcodeÓ¦ÓóÌÐòÖп´µ½µÄ£©application:didFinishLaunchin-gWithOptions:¡£
×¢Òâ¡¡ÔÚhttp://tirania.org/tmp/rosetta.htmlÖУ¬¿ÉÒÔÕÒµ½Ò»¸ö·Ç³£ÓÐÓõÄÃûΪ¡°MonoTouch
Rosetta Stone¡±µÄÎĵµ£¬ËüÁгöÁËMonoTouchÖÐÓëObjective-CÑ¡ÔñÆ÷¶ÔÓ¦µÄC#ʵÏÖ¡£
AppDelegateÊÇCocoaTouchÖÐʹÓõÄDelegationģʽµÄÒ»¸öʾÀý£¬MonoTouchÍêȫ֧³Ö¡£ÏÖÔÚÒª×öµÄÊÇÔÚÓ¦ÓóÌÐòÖÐʹÓÃUIActionSheet£¬ÕâÊÇiOS
SDKÖÐÁíÒ»ÖÖDelegationÀý×Ó¡£
2.2.4¡¡Í¨¹ýXcodeʵÏÖUIActionSheet
ÏÖÔڻص½Xcode£¨ÌýÆðÀ´ÏñµçÓ°£©´´½¨UIActionSheet²¢ÉèÖò»Í¬°´Å¥ÒÔ±ã¸Ä±äimageViewÖеÄͼƬ¡£Ä¿Ç°£¬Ê¾ÀýÒ»Ö±ÊÇÔÚÉè¼Æ´°¿ÚºÍAppDelegateÖÐÍê³ÉµÄ£¬²»Ë㸴ÔÓ¡£ÈçǰËùÊö£¬Õâ²»ÊÇÌ«¹æ·¶µÄÉè¼Æ£¬¾ßÌå»áÔÚµÚ3ÕÂÖн²Êö¡£ÏÖÔÚÐèÒªÒ»¸öÊÓͼÀ´×÷ΪUIµÄÈÝÆ÷£¬Ò»Ö±ÒÔÀ´£¬ÎªÁ˼òµ¥Æð¼û¶¼Ö±½ÓÌø¹ýÁË£¬Ã»ÓÐÌÖÂÛ¡£Õâ¸öÊÓͼ¾ÍÊÇÔçÒÑ´æÔÚµÄimageView£¬½«ÓÃÀ´ÏÔʾActionSheet¡£ÔÚLMT2_1AppDelegate.mÎļþÖУ¬Ìí¼ÓÈç´úÂëÇåµ¥2-4ËùʾµÄ´úÂëµ½changPicture:·½·¨À´´´½¨ActionSheet¡£
´úÂëÇåµ¥2-4¡¡´´½¨UIActionSheetµÄ´úÂë
-(IBAction) changePicture: (id) sender{ UIActionSheet *changeImageSheet = [[UIActionSheet alloc] initWithTitle:@"Change Image" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:NULL otherButtonTitles:@"Image 1", @"Image 2", NULL]; [changeImageSheet showInView:imageView]; [changeImageSheet release]; } |
´úÂ뽫´´½¨²¢ÏÔʾһ¸öActionSheet£¬ËüÄÚ²¿³ýÁ˰üº¬"Image 1"ºÍ"Image
2"Á½¸ö°´Å¥Í⣬»¹°üº¬Ò»¸ö"Cancel"£¨È¡Ïû£©°´Å¥¡£Ê¹ÓÃotherButtonTitles¶¨ÒåµÄ°´Å¥µÄË÷Òý·Ö±ðÊÇ0ºÍ1£¬¶øÈ¡Ïû°´Å¥µÄË÷ÒýÊÇ2¡£°´Å¥µÄµ¥»÷²Ù×÷½«Ê¹ÓÃË÷Òý½øÐÐÇø·Ö£¬ÕâÑùµÄ´¦Àí·½Ê½ÊÇObjective-C
Delegation£¨Î¯ÍУ©µÄÓÖÒ»¸öÀý×Ó¡£×¢Òâ´úÂëÖд´½¨ActionSheetʱÉèÖõÄDelegation£¨Î¯ÍУ©ÊôÐÔΪself£¬ËµÃ÷Ëü½«ÒýÓõ±Ç°¶ÔÏó£¬ÓëC#ÖеÄthisÒ»Ñù¡£Ò²¾ÍÊÇ˵£¬´«µÝ¸øActionSheetµÄ¶ÔÏó¾ÍÊÇLMT2_1AppDelegateʵÀý£¬ÒòΪµ±Ç°Àà¾ÍÊÇÕâ¸ö¡£Òò´Ë£¬LMT2_1AppDelegateÐèÒª×ñÑUIActionSheetDelegateÐÒé¡£ÏÖÔÚÉèÖÃUIActionSheetDelegateÐÒ飬´ò¿ª¶ÔÓ¦µÄÍ·Îļþ²¢ÔÚ¼âÀ¨ºÅÄÚUIApplicationDelegateÐÒ鶨ÒåµÄºóÃæ¼ÓÈëÐÒé¡£ÏÖÔÚҪʵÏÖUIActionSheetDelegateÐÒéµÄ´øÓÐÑ¡ÔñÆ÷µÄactionSheet:
clickedButtonAtIndex:·½·¨ÒÔ±ã½ÓÊÕUIActionSheetµÄ°´Å¥µ¥»÷ºóµÄ»Øµ÷´¦Àí¡£ÒªÍê³ÉÕâ¸ö£¬ÔÚ@end:ǰµÄÍ·ÎļþÌí¼ÓÒÔÏ´úÂ룺
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex; |
µ±UIActionSheetµÄ°´Å¥µ¥»÷ºó£¬ÊµÏÖ·½·¨½«Ö´Ðв¢·µ»Øµ¥»÷°´Å¥µÄË÷Òý¡£´¦Àí´úÂë¿É¸ù¾ÝË÷Òý¸Ä±äͼƬ¡£
ÔÚLMT2_1AppDelegate.mÎļþÖÐÌí¼Ó´úÂëÇåµ¥2-5ËùʾµÄ´úÂëÍê³ÉʵÏÖ¡£
´úÂëÇåµ¥2-5¡¡actionSheet:clickedButtonAtIndex:·½·¨µÄʵÏÖ´úÂë
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ switch (buttonIndex) { case 0: imageView.image = [UIImage imageNamed: @"image1.jpg"]; break; case 1: imageView.image = [UIImage imageNamed: @"image2.jpg"]; break; case 2: NSLog(@"cancel"); break; default: break; } } |
´úÂëÇåµ¥2-5ÒýÓÃÁËimage1.jpgºÍiamge2.jpgÕâÁ½¸öͼƬ¡£
×¢Òâ¡¡±¾ÊéµÄʾÀýͼƬºÍ´úÂë¿ÉÒÔµ½×÷ÕßÔÚGithubµÄ¿Õ¼ähttps://github.com/mikebluesteinÏÂÔØ¡£
Èçͼ2-7Ëùʾ£¬½«Í¼Æ¬´ÓFinderÍϷŵ½Group & filesϵÄLMT2-1¹¤³ÌµÄ¸ùĿ¼Ï£¬Xcode×Ô¶¯½«ËüÃÇ´ò°üµ½Ó¦ÓóÌÐò·¢²¼°ü¡£ËÉ¿ªÊó±êºó£¬Ñ¡ÔñCopy
Items into Destination Group’s FolderÒԱ㽫ËüÃǸ´ÖƵ½ÓëXcode¹¤³ÌÏàͬµÄλÖá£

ͼ2-7 Ìí¼Óµ½XCodeµÄGroup &&
FilesϵÄͼƬÎļþ
ÔÚXcodeÖÐÉú³É²¢ÔËÐÐÓ¦ÓóÌÐò£¬È»ºóµ¥»÷°´Å¥´ò¿ªActionSheet²¢´ÓÖÐÑ¡ÔñÒ»¸ö°´Å¥À´¸Ä±äͼƬ¡£µ±Ñ¡ÔñActionSheetµÄ°´Å¥Ê±£¬ActionSheetµÄίÍб»µ÷Ó㬴Ӷø´¦Àí°´Å¥µ¥»÷µÄ´úÂëÒ²»áµ÷Ó᣿ÉÒÔ¿´µ½£¬Objective-CÖеÄίÍÐÉè¼ÆÄ£Ê½·Ç³£ÀàËÆÓÚÆäËûÓïÑԵĻص÷½Ó¿Ú£¬Æ©ÈçC#¡£²»¹ý£¬ÓÉÓÚ¿ÉÑ¡·½·¨ÐèÒªÖ§³ÖÐÒ飬ËùÒÔMonoTouchͨ¹ýÀàÀ´ÊµÏÖ¡£ÈçÒÔÉÏ¿´µ½µÄ£¬ÔÚObjective-CÖУ¬AppDelegateµÄµ¥Ò»ÊµÏÖÔÚʾÀýÖÐÒª×ñÑÃûΪUIApplicationDelegateºÍUIActionSheetDelegateµÄÐÒé¡£ÔÚMonoTouchÖУ¬Òª´¦ÀíÕâ¸ö¿ÉÄܻ᲻֪Ëù´ë£¬ÎÞ´ÓÏÂÊÖ£¬Òò¶øÐèҪʹÓÃÀàÀ´ÊµÏÖ£¬µ«²»ÔÊÐí¶àÖØ¼Ì³Ð¡£ÏÖÔڻص½MonoDevelop²¢Íê³ÉʵÏÖ¡£
2.2.5¡¡ÔÚMonoTouchÖÐʵÏÖUIActionSheet
ÔÚMonoTouchÖУ¬»áÔÚ¹¹Ô캯ÊýÖÐÓ³Éä´úÂëÇåµ¥2-4ÖÐObjective-CµÄinitWithTitle:
delegate:cancelButtonTitle:destructiveButtonTitle:otherB-uttonTitles:·½·¨¡£´ËÍ⣬ÔÚC#ÖÐÏÔʾUIActionSheetÈÔÈ»¿ÉÒÔµ÷ÓÃShowInView·½·¨¡£²»¹ý£¬ÕâʱºòίÍÐÖ¸ÕëÖ¸ÏòµÄ²»Êǵ±Ç°ÊµÀý£¬ÒòΪËüÒѾÊÇUIApplicationDelegateµÄ×ÓÀ࣬¶øÊÇ´ÓUIActionSheetDelegateÅÉÉúµÄǶÌ×À࣬ÕâÑù¾Í¿ÉÒÔ±£Ö¤Î¯ÍÐʵÏÖ·â×°ÔÚÀࣨAppDelegate£©ÄÚ£¬ÒԱ㴴½¨µÄÀàʵÀý¿ÉÒÔ½øÐÐίÍд¦Àí£¨UIActionSheet£©¡£Æäʵ£¬Ò²²»±Ø·ÇµÃÕâÑùǶÈëίÍÐÀ࣬»¹¿ÉÒÔÔÚÕâ¸öÀàµÄÍⲿ´´½¨Ëü¡£²»¹ý£¬ÏñǶÈëίÍÐÕâÑùµÄ´¦Àí·½Ê½ÔÚMonoTouchÖÐÊǾ³£Óõ½µÄ£¬¶øÇÒËü±íÏֵúܺ᣸ù¾ÝÒÔÉÏ˵Ã÷£¬¾Í¿ÉʵÏÖÈç´úÂëÇåµ¥2-6ËùʾµÄchangePicture·½·¨¡£
´úÂëÇåµ¥2-6¡¡ÔÚMonoTouchÖÐÏÔʾUIActionSheet
UIActionSheet _changePictureSheet; ... partial void changePicture (MonoTouch.UIKit.UIButton sender){ _changePictureSheet = new UIActionSheet( "Change Picture", new ChangePictureActionSheetDelegate(this), "Cancel", null, "Image 1", "Image 2"); _changePictureSheet.ShowInView(imageView); } |
ChangePictureActionSheetDelegate¾ÍÊǸղ޲µ½µÄǶÌ×Àà¡£ÔÚObjective-CÖУ¬Ê¹ÓÃactionSheet:clickedButtonAtIndex:·½·¨À´´¦ÀíUIActionSheet°´Å¥µÄµ¥»÷²Ù×÷¡£ÔÚMonoTouchÖУ¬Ç°ÃæÒѾÌá¹ý£¬ÒªÍ¨¹ýÖØÐ´Ð麯ÊýÀ´ÊµÏÖ¡£ÊµÏÖ·½·¨µÄ¶¨Òå´úÂëÈçÏ£º
public virtual void Clicked (UIActionSheet actionSheet, int buttonIndex) |
ÓëObjective-CʾÀýÒ»Ñù£¬ÊµÏÖ½«Ê¹Óõ¥»÷°´Å¥µÄË÷ÒýÀ´Çл»Í¼Æ¬ÊÓͼµÄͼƬ¡£ÔÚµ±Ç°°æ±¾µÄMonoTouchÖÐҪעÒ⣬Cancel£¨È¡Ïû£©°´Å¥µÄË÷ÒýÊÇ×îºóÒ»¸öË÷Òý£¬¶ø²»ÊÇObjective-CÖеĵÚÒ»¸öË÷Òý¡£Èç¹ûÐèÒª£¬Ò²¿ÉÒÔͨ¹ýUIActionSheetµÄCancelButtonIndexÊôÐÔÀ´ÐÞ¸ÄCancel£¨È¡Ïû£©°´Å¥µÄË÷ÒýÖµ¡£ÎªÁ˼òµ¥Æð¼û£¬ÕâÀォʹÓÃĬÈÏÖµ£¬ChangePictureActionSheetDelegateÀàµÄʵÏÖ´úÂëÈç´úÂëÇåµ¥2-7Ëùʾ¡£
×¢Òâ¡¡ÏÂÒ»°æ±¾µÄMonoTouch»á¹Ì¶¨Cancel£¨È¡Ïû£©°´Å¥µÄλÖá£
´úÂëÇåµ¥2-7¡¡ÔÚChangePictureActionSheetDelegateÀàʵÏÖµ¥»÷²Ù×÷
class ChangePictureActionSheetDelegate : UIActionSheetDelegate { AppDelegate _appDel; public ChangePictureActionSheetDelegate (AppDelegate appDel) { _appDel = appDel; } public override void Clicked (UIActionSheet actionSheet, int buttonIndex) { switch (buttonIndex) { case 1: appDel.imageView.Image = UIImage.FromFile("image1.jpg"); break; case 2: _appDel.imageView.Image = UIImage.FromFile("image2.jpg"); break; } } } |
ÏÖÔÚÖØ¸´ÔÚXcodeÖеIJÙ×÷£¬½«Í¼Æ¬¸´ÖƵ½¹¤³ÌĿ¼Ï¡£ÔÚFinderÖн«Í¼Æ¬Íϵ½MonoDevelop½â¾ö·½°¸Ê÷Ï£¬È»ºóµ¥»÷Èçͼ2-8ËùʾµÄ¶Ô»°¿òÖеÄCopy°´Å¥¡£ÔÚ½â¾ö·½°¸Ê÷ÖеÄͼƬÉÏÓÒ»÷£¨Èç¹ûʹÓõĵ¥°´Å¥Êó±ê£¬Çë°´ÏÂCtrl¼üÔÙµ¥»÷£©£¬È»ºóÉèÖÃΪBuild
Action to Content£¬ÕâÑù¾Í¿ÉÒÔÔÚMonoDevelopÉú³ÉÓ¦ÓóÌÐòʱ°ÑͼƬ´ò°üµ½Ó¦ÓóÌÐò¡£

ͼ2-8 MonoDevelopµÄ¸´ÖÆÎļþ¶Ô»°¿ò
×¢Òâ¡¡Èç¹ûÔÚMonoDevelopÖд´½¨Îļþ¼Ð£¬µÈͬÓÚÔÚ´ÅÅÌÉÏ´´½¨Îļþ¼Ð£¬ÕâÓëÔÚXcodeÖÐÔÚ´ÅÅ̸ùĿ¼ÏÂĬÈÏΪÐéÄâĿ¼²»Í¬¡£
×îºóÍê³ÉÈç´úÂëÇåµ¥2-8ËùʾµÄMain.csÎļþ¡£Èç¹ûÏÖÔÚÉú³É²¢ÔËÐÐÓ¦ÓóÌÐò£¬Çл»Í¼Æ¬£¬ÄÇôЧ¹ûÓëÔÚObjective-CÖп´µ½µÄÒ»Ñù¡£
´úÂëÇåµ¥2-8¡¡Main.csµÄ×îºó°æ±¾
using System; using System.Collections.Generic; using System.Linq; using MonoTouch.Foundation; using MonoTouch.UIKit; namespace LMT22 { public class Application { static void Main (string[] args) { UIApplication.Main (args); } } // The name AppDelegate is referenced in the MainWindow.xib file. public partial class AppDelegate : UIApplicationDelegate { UIActionSheet _changePictureSheet; // This method is invoked when the application has // loaded its UI and its ready to run public override bool FinishedLaunching (UIApplication app, NSDictionary options) { window.MakeKeyAndVisible (); return true; } class ChangePictureActionSheetDelegate : UIActionSheetDelegate { AppDelegate _appDel; public ChangePictureActionSheetDelegate ( AppDelegate appDel) { _appDel = appDel; } public override void Clicked (UIActionSheet actionSheet, int buttonIndex) { switch (buttonIndex) { case 1: _appDel.imageView.Image = UIImage.FromFile ("image1.jpg"); break; case 2: _appDel.imageView.Image = UIImage.FromFile ("image2.jpg"); break; } } } partial void changePicture (MonoTouch.UIKit.UIButton sender) { _changePictureSheet = new UIActionSheet ( "Change Picture", new ChangePictureActionSheetDelegate (this), "Cancel", null, "Image 1", "Image 2"); _changePictureSheet.ShowInView (imageView); } // This method is required in iPhoneOS 3.0 public override void OnActivated (UIApplication application) { } } } |
ÏÖÔÚ£¬ÒѾÁ˽âÁËÈçºÎÔÚMonoTouchÖÐʹÓÃC#¿ª·¢Ó¦ÓóÌÐò£¬²¢ÓëÔÚXcodeÖÐʹÓÃObjective-C¿ª·¢iPhoneÓ¦ÓóÌÐòµÄºËÐÄÉè¼ÆÄ£Ê½×öÁ˱Ƚϡ£ÏÂÃæÒªÁ˽âµÄÊÇMonoTouchÈçºÎ´´½¨ÕâЩ²¢ÈÃËüÃǹ¤×÷¡£
|