iOS8开发~Swift(三)UI详解
来源:互联网 发布:js将图片转换成base64 编辑:程序博客网 时间:2024/04/28 03:00
一、概要
使用Swift来完成iOS的UI界面,其实现思想与OC实现几乎一致,只不过写法上有很大区别,个别控件较之前有较大改动。由于有纯代码强迫症,所以接下来创建一个纯代码动项目,然后在此基础上详细描述常用UI控件的Swift代码实现。
二、创建项目
首先创建一个新项目SwiftDemo,语言选择Swift,详情参考《 iOS8开发~Swift(一)入门》,然后打开项目plist文件,删除其中的Main storyboard file base name一行,其他内容不需要改动,程序会默认从AppDelegate.swift开始执行,但此时主window需要代码初始化,因为我们已经删除了storyboard,所以需要添加如下代码:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { // Override point for customization after application launch. self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window!.backgroundColor = UIColor.whiteColor() self.window!.makeKeyAndVisible() return true }
现在程序应该可以运行了,不过什么内容都没有。
下面打算搭建一个很常见都项目框架,主window的rootviewController为一个
UITabBarController对象,UITabBarController对象作为容器,其有两个标签,每个标签的内容展示为一个
UINavigationController对象,UINavigationController对象的rootViewController为实际的用户界面,相信这个结构使用OC实现大家都很熟悉了,但使用Swift该怎么样实现呢,其实思想都是一样都,只不过写法有区别而已,下面详细讨论代码实现了。
三、UI实现详解
1、在应用程序启动函数中添加如下代码:其中 viewControllerA 和 viewControllerB是需新创建都两个视图控制器,具体实现参考《 iOS8开发~Swift(一)入门》
var window: UIWindow? var tabBarController: UITabBarController? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { // Override point for customization after application launch. self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window!.backgroundColor = UIColor.whiteColor() var viewControllerA = ViewControllerA(); viewControllerA.title = "基本UI" var viewControllerB = ViewControllerB(); viewControllerB.title = "其他" self.tabBarController = UITabBarController() self.tabBarController!.delegate = self; self.tabBarController!.viewControllers = [ UINavigationController(rootViewController: viewControllerA), UINavigationController(rootViewController: viewControllerB) ] self.tabBarController!.selectedIndex = 0; self.window!.rootViewController = self.tabBarController self.window!.makeKeyAndVisible() return true }
这样,之前描述的项目框架就实现了。如果需要在UITabBarController的代理方法中做一些事情,可以实现其代理:
@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate, UITabBarControllerDelegate
//UITabBarControllerDelegate func tabBarController(tabBarController: UITabBarController!, didSelectViewController viewController: UIViewController!) { }
运行效果:
2、以ViewControllerA作为UI介绍导航页面,在其中实现一个表视图TableView,其数据源从读取一个plist文件获取:
新建立一个ViewControllerA,取消勾选Xib选项,创建后重写loadView方法,然后初始化一个表视图,主要代码如下:
import UIKitclass ViewControllerA: UIViewController, UITableViewDelegate, UITableViewDataSource { var list: NSArray? var tableView: UITableView? override func loadView() { super.loadView() } override func viewDidLoad() { super.viewDidLoad() self.list = NSArray(contentsOfFile: NSBundle.mainBundle().pathForResource("BasicUI", ofType:"plist")) println(self.list) self.tableView = UITableView(frame: self.view.frame, style:UITableViewStyle.Plain) self.tableView!.delegate = self self.tableView!.dataSource = self self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell") self.view?.addSubview(self.tableView) } func numberOfSectionsInTableView(tableView: UITableView!) -> Int { return 1; } func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { return self.list!.count } func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell! cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator cell.textLabel.text = self.list?.objectAtIndex(indexPath.row) as String return cell } // UITableViewDelegate Methods func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { self.tableView!.deselectRowAtIndexPath(indexPath, animated: true) var itemString = self.list?.objectAtIndex(indexPath.row) as String var viewController : UIViewController? if itemString == "UIView" { viewController = TheViewController() } //省略部分代码 else { println("viewController is nil") } viewController!.hidesBottomBarWhenPushed = true self.navigationController.pushViewController(viewController, animated:true) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
实际运行效果
3、下面逐个介绍各个控件的实现
(1)UIView
import UIKitclass TheView: UIView { override func drawRect(rect: CGRect) { UIColor.redColor().setFill(); UIRectFill(CGRectMake(0, 100, 100, 100)); }}class TheViewController: UIViewController { override func loadView() { let theView = TheView() theView.backgroundColor = UIColor.brownColor() theView.layer.cornerRadius = 3 theView.layer.borderWidth = 5 theView.layer.borderColor = UIColor.darkGrayColor().CGColor self.view = theView; } override func viewDidLoad() { super.viewDidLoad()// 添加手势 let recognizer = UITapGestureRecognizer(target: self, action: "tapAction:") recognizer.numberOfTapsRequired = 2; recognizer.numberOfTouchesRequired = 1; self.view.addGestureRecognizer(recognizer) } func tapAction(sender: UIGestureRecognizer) { println("tapAction") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
其中涉及到视图手势添加,视图重会,修改Layer等实现,效果如图:
(2)UILabel
import UIKitclass LabelViewController: UIViewController { override func loadView() { super.loadView(); } override func viewDidLoad() { super.viewDidLoad() var label = UILabel(frame: CGRectMake(0, 100, self.view.bounds.size.width, 200)) label.backgroundColor = UIColor.blackColor() label.textColor = UIColor.whiteColor() label.numberOfLines = 0 label.lineBreakMode = NSLineBreakMode.ByWordWrapping label.text = "Swift is designed to provide seamless compatibility with Cocoa and Objective-C. You can use Objective-C APIs (ranging from system frameworks to your own custom code) in Swift, and you can use Swift APIs in Objective-C. " label.font = UIFont.italicSystemFontOfSize(20) self.view.addSubview(label) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
效果如图:
(3)UIButton
import UIKitclass ButtonViewController: UIViewController { override func loadView() { super.loadView(); } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. var button = UIButton.buttonWithType(UIButtonType.System) as UIButton button.frame = CGRect(x:100, y:200, width:100, height:100); button.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal) button.setTitleColor(UIColor.greenColor(), forState:UIControlState.Selected) button.setTitle("Normal", forState:UIControlState.Normal) button.setTitle("Selected", forState:UIControlState.Selected) button.setBackgroundImage(UIImage(named: "image.png"), forState:UIControlState.Normal) button.tag = 1000; button.clipsToBounds = true; button.layer.cornerRadius = 5; button.addTarget(self, action:"buttonAction:", forControlEvents:UIControlEvents.TouchUpInside) self.view.addSubview(button) } func buttonAction(sender: UIButton) { println("buttonAction") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
运行效果:
(4)UIImageView 与 UIImage
import UIKitclass ImageViewController: UIViewController { override func loadView() { super.loadView(); } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. var imageView = UIImageView(frame: CGRectMake(100, 100, 50, 50)) imageView.backgroundColor = UIColor.whiteColor(); imageView.animationImages = [ UIImage(contentsOfFile: NSBundle.mainBundle().pathForResource("bird-01", ofType:"png")), UIImage(contentsOfFile: NSBundle.mainBundle().pathForResource("bird-02", ofType:"png")), UIImage(contentsOfFile: NSBundle.mainBundle().pathForResource("bird-03", ofType:"png")), UIImage(named: "bird-04.png") ] imageView.contentMode = UIViewContentMode.ScaleAspectFit imageView.animationDuration = 1; imageView.startAnimating() self.view.addSubview(imageView) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
运行效果,这是一个图片动画:
(5)UITextField
import UIKitclass TextFieldViewController: UIViewController, UITextFieldDelegate { override func loadView() { super.loadView(); } override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: "textFieldTextDidBeginEditingNotification:", name:UITextFieldTextDidBeginEditingNotification, object:nil) var textField = UITextField(frame: CGRectMake(10, 100, 300, 40)) textField.backgroundColor = UIColor.clearColor() textField.textColor = UIColor.blackColor() textField.placeholder = "请输入..." textField.borderStyle = UITextBorderStyle.RoundedRect textField.adjustsFontSizeToFitWidth = true textField.delegate = self self.view.addSubview(textField) } func textFieldTextDidBeginEditingNotification(sender: NSNotification!) { } // UITextFieldDelegate func textFieldShouldBeginEditing(textField: UITextField!) -> Bool { return true; } func textFieldDidBeginEditing(textField: UITextField!) { } func textFieldShouldEndEditing(textField: UITextField!) -> Bool { return true; } func textFieldDidEndEditing(textField: UITextField!) { } func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool { return true; } func textFieldShouldReturn(textField: UITextField!) -> Bool { return true; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
运行效果:
(6)UITextView
import UIKitclass TextViewController: UIViewController, UITextViewDelegate { override func loadView() { super.loadView(); } override func viewDidLoad() { super.viewDidLoad() var textView = UITextView(frame:CGRectMake(10.0, 120.0, 300.0, 400.0)) textView.backgroundColor = UIColor.blackColor() textView.textColor = UIColor.whiteColor() textView.editable = false textView.font = UIFont.boldSystemFontOfSize(30) textView.delegate = self; textView.text = "Swift is designed to provide seamless compatibility with Cocoa and Objective-C. You can use Objective-C APIs (ranging from system frameworks to your own custom code) in Swift, and you can use Swift APIs in Objective-C. " self.view.addSubview(textView) } func textViewShouldBeginEditing(textView: UITextView!) -> Bool { return true; } func textViewShouldEndEditing(textView: UITextView!) -> Bool { return true; } func textViewDidBeginEditing(textView: UITextView!) { } func textViewDidEndEditing(textView: UITextView!) { } func textView(textView: UITextView!, shouldChangeTextInRange range: NSRange, replacementText text: String!) -> Bool { return true; } func textViewDidChange(textView: UITextView!) { } func textViewDidChangeSelection(textView: UITextView!) { } func textView(textView: UITextView!, shouldInteractWithURL URL: NSURL!, inRange characterRange: NSRange) -> Bool { return true; } func textView(textView: UITextView!, shouldInteractWithTextAttachment textAttachment: NSTextAttachment!, inRange characterRange: NSRange) -> Bool { return true; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
运行效果:
(7)UISwitch
import UIKitclass SwitchViewController: UIViewController { override func loadView() { super.loadView(); } override func viewDidLoad() { super.viewDidLoad() var switchCtr = UISwitch(frame: CGRectMake(100, 100, 80, 30)) switchCtr.on = true switchCtr.addTarget(self, action: "switchAction:", forControlEvents:UIControlEvents.ValueChanged) self.view.addSubview(switchCtr) } func switchAction(sender: UISwitch) { println("switchAction") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
运行效果:
(8)UIScrollView
import UIKitclass ScrollViewController: UIViewController, UIScrollViewDelegate { override func loadView() { super.loadView(); } override func viewDidLoad() { super.viewDidLoad() var scroll = UIScrollView(frame: self.view.bounds) scroll.pagingEnabled = true scroll.scrollEnabled = true scroll.showsVerticalScrollIndicator = true scroll.showsHorizontalScrollIndicator = true scroll.delegate = self var X : CGFloat = 0 for (var i = 0; i < 2; i++) { var label = UILabel() label.text = "\(i)" label.textAlignment = NSTextAlignment.Center label.backgroundColor = UIColor.lightGrayColor() label.frame = CGRectMake(X, 0, self.view.bounds.size.width, self.view.bounds.size.height) X += 320 scroll.addSubview(label) } scroll.contentSize = CGSizeMake(2 * self.view.bounds.size.width, self.view.bounds.size.height) self.view.addSubview(scroll) } // UIScrollViewDelegate func scrollViewDidScroll(scrollView: UIScrollView!) { println("scrollViewDidScroll") } func scrollViewWillBeginDragging(scrollView: UIScrollView!) { } func scrollViewWillEndDragging(scrollView: UIScrollView!, withVelocity velocity: CGPoint, targetContentOffset: CMutablePointer<CGPoint>) { } func scrollViewDidEndDragging(scrollView: UIScrollView!, willDecelerate decelerate: Bool) { } func scrollViewWillBeginDecelerating(scrollView: UIScrollView!) { } func scrollViewDidEndDecelerating(scrollView: UIScrollView!) { } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
运行效果:
(9)UIPageView
import UIKitclass PageControlViewController: UIViewController { override func loadView() { super.loadView() } override func viewDidLoad() { super.viewDidLoad() var pageControl = UIPageControl(frame: CGRectMake(100, 100, 100, 100)); pageControl.numberOfPages = 10 pageControl.currentPage = 5 pageControl.currentPageIndicatorTintColor = UIColor.grayColor() pageControl.pageIndicatorTintColor = UIColor.redColor() pageControl.addTarget(self, action: "pageControlAction:", forControlEvents:UIControlEvents.ValueChanged) self.view.addSubview(pageControl) } func pageControlAction(sender: UIPageControl) { println("pageControlAction:\(sender.currentPage)") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
效果如图:
(10)UIAlertView 与 UIActionSheet
import UIKitclass AlertViewController: UIViewController { override func loadView() { super.loadView() } override func viewDidAppear(animated: Bool) { let alertController = UIAlertController(title: "title", message: "message", preferredStyle: UIAlertControllerStyle.Alert) // let alertController = UIAlertController(title: "title", message: "message", preferredStyle: UIAlertControllerStyle.ActionSheet) let cancelAction = UIAlertAction(title: "cancel", style: UIAlertActionStyle.Cancel) { action in println("cancel") } let otherAction = UIAlertAction(title: "other", style: UIAlertActionStyle.Default) { action in NSLog("other") } let secondAction = UIAlertAction(title: "secondAction", style: UIAlertActionStyle.Default) { action in NSLog("secondAction") } alertController.addAction(cancelAction) alertController.addAction(otherAction) alertController.addAction(secondAction) presentViewController(alertController, animated: true, completion: nil) } override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
运行效果:
(11)UIActivityIndicatorView
import UIKitclass ActivityIndicatorViewController: UIViewController { override func loadView() { super.loadView() } override func viewDidAppear(animated: Bool) { var activity = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray) activity.frame = CGRectMake(100, 100, 40, 40) activity.startAnimating() activity.hidesWhenStopped = true self.view.addSubview(activity) } override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
运行效果:
(12)UISlider
import UIKitclass SliderViewController: UIViewController { override func loadView() { super.loadView() } override func viewDidLoad() { super.viewDidLoad() var slider = UISlider(frame:CGRectMake(10.0, 150.0, 300.0, 30.0)) slider.addTarget(self, action:"sliderAction:", forControlEvents:UIControlEvents.ValueChanged) self.view.addSubview(slider) } func sliderAction(sender: UISlider) { println("sliderAction:\(sender.value)") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
运行效果:
(13)UIProgressView
import UIKitclass ProgressViewController: UIViewController { override func loadView() { super.loadView() } override func viewDidAppear(animated: Bool) { var progress = UIProgressView(progressViewStyle:UIProgressViewStyle.Default) progress.progressTintColor = UIColor.blackColor() progress.trackTintColor = UIColor.redColor() progress.frame = CGRectMake(10.0, 150.0, 300.0, 40.0) progress.setProgress(0.9, animated: true) self.view.addSubview(progress) } override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
效果如图:
(14)UISegmentedControl
import UIKitclass SegmentedViewController: UIViewController { override func loadView() { super.loadView() } override func viewDidLoad() { super.viewDidLoad() var segment = UISegmentedControl(items:["one", "two", "three", "four"]) segment.frame = CGRectMake(10.0, 110.0, 300.0, 30.0) segment.segmentedControlStyle = UISegmentedControlStyle.Bordered segment.momentary = true segment.addTarget(self, action:"segmentAction:", forControlEvents:UIControlEvents.TouchUpInside) self.view.addSubview(segment) } func segmentAction(sender: UISegmentedControl) { println("segmentAction") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
实现效果:
(15)UIDatePicker
import UIKitclass DatePickerViewController: UIViewController { override func loadView() { super.loadView() } override func viewDidLoad() { super.viewDidLoad() var datePicker = UIDatePicker(frame:CGRectMake(0.0, 120.0, 200.0, 200.0)) datePicker.datePickerMode = UIDatePickerMode.DateAndTime datePicker.minimumDate = NSDate.date() datePicker.minuteInterval = 1 datePicker.addTarget(self, action: "action", forControlEvents: UIControlEvents.ValueChanged) self.view.addSubview(datePicker) } func action() { println("action") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
实现效果:
(16)UIWebView
import UIKitclass WebViewController: UIViewController, UIWebViewDelegate { override func loadView() { super.loadView() } override func viewDidLoad() { super.viewDidLoad() var webView = UIWebView(frame: self.view.bounds) webView.backgroundColor = UIColor.whiteColor() webView.scalesPageToFit = true webView.delegate = self; var url = NSURL(string: "http://www.baidu.com") var request = NSURLRequest(URL: url) webView.loadRequest(request) self.view.addSubview(webView) } // UIWebViewDelegate func webViewDidStartLoad(webView: UIWebView) { UIApplication.sharedApplication().networkActivityIndicatorVisible = true } func webViewDidFinishLoad(webView: UIWebView) { UIApplication.sharedApplication().networkActivityIndicatorVisible = false } func webView(webView: UIWebView, didFailLoadWithError error: NSError) { println("didFailLoadWithError") UIApplication.sharedApplication().networkActivityIndicatorVisible = false } func textFieldShouldReturn(textField: UITextField) -> Bool { textField.resignFirstResponder() return true } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
实现效果:
(17)UIToolbar
import UIKitclass ToolbarViewController: UIViewController { override func loadView() { super.loadView() } override func viewDidLoad() { super.viewDidLoad() var toolBar = UIToolbar(frame:CGRectMake(10.0, 120.0, 300.0, 30.0)) toolBar.barStyle = .BlackTranslucent toolBar.tintColor = UIColor.greenColor() toolBar.backgroundColor = UIColor.blueColor() var flexibleSpace = UIBarButtonItem(barButtonSystemItem:UIBarButtonSystemItem.FlexibleSpace, target:"barButtonItemClicked:", action:nil) var barBtnItemA = UIBarButtonItem(title: "one", style:UIBarButtonItemStyle.Plain, target:self, action:"barButtonItemClicked:") var barBtnItemB = UIBarButtonItem(title: "two", style:UIBarButtonItemStyle.Plain, target:self, action:"barButtonItemClicked:") var barBtnItemC = UIBarButtonItem(title: "three", style:UIBarButtonItemStyle.Plain, target:self, action:"barButtonItemClicked:") var barBtnItemD = UIBarButtonItem(title: "four", style:UIBarButtonItemStyle.Plain, target:self, action:"barButtonItemClicked:") toolBar.items = [flexibleSpace, barBtnItemA, flexibleSpace, barBtnItemB, flexibleSpace, barBtnItemC, flexibleSpace, barBtnItemD, flexibleSpace] self.view.addSubview(toolBar) } func barButtonItemClicked(sender: UIBarButtonItem) { NSLog("barButtonItemClicked: \(sender)") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
实现效果:
(18)UISearchBar
import UIKitclass SearchBarViewController: UIViewController, UISearchBarDelegate { override func loadView() { super.loadView() } override func viewDidLoad() { super.viewDidLoad() var searchBar = UISearchBar(frame:CGRectMake(0, 60.0, 320.0, 100.0)) searchBar.showsCancelButton = true searchBar.searchBarStyle = UISearchBarStyle.Default searchBar.showsScopeBar = true searchBar.scopeButtonTitles = [ "scope A", "scope B" ] self.view.addSubview(searchBar) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } // UISearchBarDelegate func searchBar(UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) { println("selectedScopeButtonIndexDidChange \(selectedScope)") } func searchBarSearchButtonClicked(searchBar: UISearchBar) { println("searchBarSearchButtonClicked: \(searchBar.text)") searchBar.resignFirstResponder() } func searchBarCancelButtonClicked(searchBar: UISearchBar) { println("searchBarCancelButtonClicked") searchBar.resignFirstResponder() }}
实现效果:
到这里基本常用到UI控件实现的Swift版本就搞定啦,当然实际项目中需要更灵活、更复杂的实现,这些代码仅供参考,希望有抛砖引玉的效果!更多内容请点击这里
Demo下载:http://download.csdn.net/detail/zfpp25_/7463851
欢迎加入群共同学习和进步:QQ群:170549973
- iOS8开发~Swift(三)UI详解
- iOS8开发~Swift(三)UI详解
- iOS8开发~Swift UI详解
- [ iOS8之Swift~UI详解]
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~Swift(一)入门
- iOS8开发~Swift(二)Playground
- iOS8开发~Swift(四)理解?和!
- iOS8开发~Swift(VS)Objective-C
- iOS8-Swift开发教程
- 构建OpenJDK 相关错误解决方法
- H264/ACC数据使用librtmp推流到服务器
- Android2.1消息应用(Messaging)
- “90后”凤凰男:寒门难出贵子
- CComboBox 只读
- iOS8开发~Swift(三)UI详解
- 树的父节点表示法及其Java实现
- 结构体内存对齐
- Doing Enterprise Architecture- Benefits and Realizing Value
- virtio一个KVM虚拟环境下针对I/O虚拟化通用框架
- s3c2440为嘛能跳转到SDRAM里面去执行等相关问题
- org.apache.hadoop.hbase.MasterNotRunningException解决策略
- OCP-1Z0-051 补充题库 第11题 SQL和SQL*Plus的区别
- C++ Primer 指针