{"id":192,"date":"2025-05-29T11:32:58","date_gmt":"2025-06-05T03:33:57","guid":{"rendered":"https:\/\/badgameshow.com\/steven\/?p=192"},"modified":"2025-06-05T11:32:58","modified_gmt":"2025-06-05T03:33:57","slug":"swift-material-design-materialcomponents-materialbuttons-%e7%af%84%e4%be%8b%e6%95%99%e5%ad%b8","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/steven\/swift\/swift-material-design-materialcomponents-materialbuttons-%e7%af%84%e4%be%8b%e6%95%99%e5%ad%b8\/","title":{"rendered":"Swift \u7a0b\u5f0f\u8a2d\u8a08\uff1a\u4f7f\u7528 Material Design \u5143\u4ef6\u5275\u5efa\u7f8e\u89c0\u7684\u6309\u9215\u548c\u8f38\u5165\u6846"},"content":{"rendered":"<p>&#8220;`markdown<br \/>\n## CocoaPods \u5b89\u88dd<\/p>\n<p>\u8981\u5728 Swift \u5c08\u6848\u4e2d\u4f7f\u7528 Material Components\uff0c\u9996\u5148\u9700\u8981\u900f\u904e CocoaPods \u9032\u884c\u5b89\u88dd\u3002\u8acb\u5728\u4f60\u7684 Podfile \u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u884c\uff1a<\/p>\n<p>&#8220;`sh<br \/>\npod &#8216;MaterialComponents&#8217;<br \/>\n&#8220;`<\/p>\n<p>\u63a5\u8457\uff0c\u57f7\u884c\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88dd\u6240\u9700\u7684\u5143\u4ef6\uff1a<\/p>\n<p>&#8220;`sh<br \/>\npod install<br \/>\n&#8220;`<\/p>\n<p>## \u4f7f\u7528 Swift \u5275\u5efa\u6309\u9215\u8207\u6587\u672c\u6846<\/p>\n<p>\u5728\u5c0e\u5165 Material Components \u5f8c\uff0c\u4f60\u53ef\u4ee5\u958b\u59cb\u4f7f\u7528\u9019\u4e9b\u5143\u4ef6\u4f86\u589e\u5f37\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u754c\u9762\u3002\u4ee5\u4e0b\u662f\u5982\u4f55\u5275\u5efa\u4e00\u500b\u63d0\u5347\u7684\u6309\u9215\uff08Raised Button\uff09\u548c\u6d6e\u52d5\u6587\u672c\u6846\uff08Floating TextField\uff09\u7684\u7bc4\u4f8b\u3002<\/p>\n<p>### \u5275\u5efa\u63d0\u5347\u7684\u6309\u9215<\/p>\n<p>\u9996\u5148\uff0c\u5c0e\u5165 MaterialButtons \u6a21\u7d44\uff1a<\/p>\n<p>&#8220;`swift<br \/>\nimport MaterialComponents.MaterialButtons<br \/>\n&#8220;`<\/p>\n<p>\u63a5\u8457\uff0c\u5728\u4f60\u7684\u8996\u5716\u63a7\u5236\u5668\u4e2d\uff0c\u91cd\u5beb `viewWillAppear` \u65b9\u6cd5\u4f86\u5275\u5efa\u4e26\u986f\u793a\u6309\u9215\uff1a<\/p>\n<p>&#8220;`swift<br \/>\noverride func viewWillAppear(_ animated: Bool) {<br \/>\n    super.viewWillAppear(animated)<\/p>\n<p>    let raiseButton = MDCRaisedButton()<br \/>\n    raiseButton.frame = CGRect(x: 100, y: 100, width: 100, height: 50) \/\/ \u8abf\u6574\u9ad8\u5ea6\u4ee5\u7b26\u5408\u8a2d\u8a08\u8981\u6c42<br \/>\n    raiseButton.setTitle(&#8220;Raised Button&#8221;, for: .normal)<br \/>\n    raiseButton.sizeToFit()<br \/>\n    raiseButton.addTarget(self, action: #selector(tapped), for: .touchUpInside)<br \/>\n    self.view.addSubview(raiseButton)<br \/>\n}<\/p>\n<p>@objc func tapped() {<br \/>\n    print(&#8220;Button tapped!&#8221;)<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>### \u5275\u5efa\u6d6e\u52d5\u6587\u672c\u6846<\/p>\n<p>\u540c\u6a23\uff0c\u4f60\u53ef\u4ee5\u5275\u5efa\u4e00\u500b\u6d6e\u52d5\u6587\u672c\u6846\uff0c\u8b93\u7528\u6236\u8f38\u5165\u8cc7\u6599\uff1a<\/p>\n<p>&#8220;`swift<br \/>\nimport MaterialComponents.MaterialTextFields<\/p>\n<p>let textFieldFloating = MDCTextField()<br \/>\ntextFieldFloating.frame = CGRect(x: 100, y: 200, width: 200, height: 50) \/\/ \u8abf\u6574\u5bec\u5ea6\u8207\u9ad8\u5ea6\u4ee5\u7b26\u5408\u8a2d\u8a08\u8981\u6c42<br \/>\ntextFieldFloating.placeholder = &#8220;Enter text&#8221;<br \/>\nself.view.addSubview(textFieldFloating)<br \/>\n&#8220;`<\/p>\n<p>## \u932f\u8aa4\u6392\u9664<\/p>\n<p>\u5982\u679c\u5728\u4f7f\u7528 Material Components \u6642\u9047\u5230\u554f\u984c\uff0c\u8acb\u6aa2\u67e5\u4ee5\u4e0b\u5e7e\u9ede\uff1a<\/p>\n<p>&#8211; \u78ba\u4fdd\u4f60\u7684 Podfile \u6b63\u78ba\u4e14\u5df2\u6210\u529f\u57f7\u884c `pod install`\u3002<br \/>\n&#8211; \u6aa2\u67e5 Import \u8a9e\u53e5\u662f\u5426\u6b63\u78ba\uff0c\u4e26\u78ba\u4fdd\u4f60\u5df2\u5c0e\u5165\u6240\u6709\u9700\u8981\u7684\u6a21\u7d44\u3002<br \/>\n&#8211; \u78ba\u4fdd\u5728\u8996\u5716\u63a7\u5236\u5668\u7684\u751f\u547d\u9031\u671f\u65b9\u6cd5\u4e2d\u6b63\u78ba\u8a2d\u7f6e\u5143\u4ef6\u3002<\/p>\n<p>## \u5ef6\u4f38\u61c9\u7528<\/p>\n<p>Material Design \u662f\u4e00\u7a2e\u73fe\u4ee3\u7684\u8a2d\u8a08\u98a8\u683c\uff0c\u4f60\u53ef\u4ee5\u5229\u7528\u9019\u4e9b\u5143\u4ef6\u5275\u5efa\u5176\u4ed6 UI \u5143\u7d20\uff0c\u5982\u5207\u63db\u958b\u95dc\u3001\u4e0b\u62c9\u9078\u55ae\u7b49\u3002\u9019\u4e0d\u50c5\u80fd\u63d0\u5347\u61c9\u7528\u7684\u7f8e\u89c0\u5ea6\uff0c\u9084\u80fd\u6539\u5584\u7528\u6236\u9ad4\u9a57\u3002<\/p>\n<p>![Material Design Button Example](https:\/\/badgameshow.com\/steven\/wp-content\/uploads\/2020\/11\/cup-1-1.png &#8220;\u9019\u662f\u4e00\u500b\u63d0\u5347\u7684 Material Design \u6309\u9215\u7bc4\u4f8b&#8221;)<\/p>\n<p>## Q&#038;A\uff08\u5e38\u898b\u554f\u984c\u89e3\u7b54\uff09<\/p>\n<p>**Q1: \u5982\u4f55\u5728 Swift \u4e2d\u4f7f\u7528 Material Components\uff1f**<br \/>\nA: \u4f60\u9700\u8981\u5728 Podfile \u4e2d\u5b89\u88dd MaterialComponents\uff0c\u7136\u5f8c\u5728 Swift \u6a94\u6848\u4e2d\u5c0e\u5165\u76f8\u95dc\u6a21\u7d44\u5373\u53ef\u958b\u59cb\u4f7f\u7528\u3002<\/p>\n<p>**Q2: \u5982\u679c\u6309\u9215\u6c92\u6709\u986f\u793a\uff0c\u8a72\u600e\u9ebc\u8fa6\uff1f**<br \/>\nA: \u78ba\u4fdd\u4f60\u5728\u6b63\u78ba\u7684\u751f\u547d\u9031\u671f\u65b9\u6cd5\u4e2d\u6dfb\u52a0\u6309\u9215\uff0c\u4e26\u6aa2\u67e5\u6309\u9215\u7684 frame \u662f\u5426\u4f4d\u65bc\u53ef\u898b\u5340\u57df\u5167\u3002<\/p>\n<p>**Q3: Material Design \u53ef\u4ee5\u8207 SwiftUI \u4e00\u8d77\u4f7f\u7528\u55ce\uff1f**<br \/>\nA: \u96d6\u7136 Material Design \u4e3b\u8981\u91dd\u5c0d UIKit\uff0c\u4f46\u4e5f\u6709\u4e00\u4e9b\u5143\u4ef6\u652f\u6301 SwiftUI\u3002\u4f60\u53ef\u4ee5\u67e5\u95b1\u76f8\u95dc\u6587\u6a94\u4ee5\u7372\u5f97\u66f4\u591a\u8cc7\u8a0a\u3002<br \/>\n&#8220;`<br \/>\n&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;`markdown ## Cocoa&#8230;<\/p>\n","protected":false},"author":1,"featured_media":559,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"aside","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[5,108],"tags":[],"class_list":["post-192","post","type-post","status-publish","format-aside","has-post-thumbnail","hentry","category-swift","category-xcode","post_format-post-format-aside"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/badgameshow.com\/steven\/wp-content\/uploads\/2020\/11\/cup-1-1.png","jetpack-related-posts":[],"jetpack_shortlink":"https:\/\/wp.me\/pcFK27-36","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts\/192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/comments?post=192"}],"version-history":[{"count":5,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts\/192\/revisions"}],"predecessor-version":[{"id":990,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts\/192\/revisions\/990"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/media\/559"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/media?parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/categories?post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/tags?post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}