나는 모든 곳에서 수색을 해왔고 지금까지 아무것도 나를 위해 일하지 않았습니다.
기본적으로 rootView.xib라는 .xib 파일을 원하고 그 안에 화면의 절반 만 차지하는 UIView (containerView라고 부릅니다)를 원합니다 (일반 뷰와 새 뷰가있을 것입니다). 그런 다음 firstView.xib라는 다른 .xib 파일을 원하고 containerView 내부에로드합니다. 그래서 나는 firstView.xib에 많은 것들이 있고 rootView.xib에 다른 많은 것들이 있고 rootView.xib의 containerView 내부에 내 firstView.xib를로드 할 수 있지만 화면의 절반 만 차지하므로 여전히 볼 수 있습니다. rootView.xib의 물건
답변
프로그래밍 방식으로 xib 파일에서 객체를 가져 오려면 다음을 사용할 수 있습니다. [[NSBundle mainBundle] loadNibNamed:@"MyXibName" owner:self options:nil]
이것은 xib의 최상위 객체 배열을 반환합니다.
따라서 다음과 같이 할 수 있습니다 .
UIView *rootView = [[[NSBundle mainBundle] loadNibNamed:@"MyRootView" owner:self options:nil] objectAtIndex:0];
UIView *containerView = [[[NSBundle mainBundle] loadNibNamed:@"MyContainerView" owner:self options:nil] lastObject];
[rootView addSubview:containerView];
[self.view addSubview:rootView];
답변
다른 .xib 파일 내의 .xib 파일에서 UIView를로드하기 위해 github에서 샘플 프로젝트를 만들었습니다. 또는 프로그래밍 방식으로 수행 할 수 있습니다.
다른 UIViewController 객체에서 재사용하려는 작은 위젯에 유용합니다.
- 새로운 접근 방식 : https://github.com/PaulSolt/CustomUIView
- 원래 접근 방식 : https://github.com/PaulSolt/CompositeXib
답변
시도해 볼 수 있습니다.
UIView *firstViewUIView = [[[NSBundle mainBundle] loadNibNamed:@"firstView" owner:self options:nil] firstObject];
[self.view.containerView addSubview:firstViewUIView];
답변
[Swift 구현]
xib에서 뷰를로드하는 보편적 인 방법 :
예:
let myView = Bundle.loadView(fromNib: "MyView", withType: MyView.self)
이행:
extension Bundle {
static func loadView<T>(fromNib name: String, withType type: T.Type) -> T {
if let view = Bundle.main.loadNibNamed(name, owner: nil, options: nil)?.first as? T {
return view
}
fatalError("Could not load view with type " + String(describing: type))
}
}
답변
XIB 파일 만들기 :
파일-> 새 파일-> iOS-> 코코아 터치 클래스-> 다음
“XIB 파일도 생성”을 확인하십시오.
함께 공연하고 tableview
싶어서 서브 클래스를 선택했습니다UITableViewCell
당신은 당신의 requerment로 선택할 수 있습니다
원하는대로 XIB 파일 디자인 (RestaurantTableViewCell.xib)
우리는 각 행을 hegiht로 설정하기 위해 행 높이를 잡아야합니다.
지금! 그들에게 신속한 파일을 가져갈 필요가 있습니다. 나는 헐떡 restaurantPhoto
이고 restaurantName
당신은 당신 모두를 헐 수 있습니다.
이제 UITableView 추가
name
.nib 확장자를 포함 할 필요가없는 nib 파일의 이름입니다.
owner
nib의 File ‘s Owner 개체로 할당 할 개체입니다.
options
nib 파일을 열 때 사용할 옵션이 포함 된 사전.
먼저
정의하지 않은 경우 모든 뷰를 가져옵니다. 따라서 해당 세트 내에서 하나의 뷰를 가져와야합니다 frist
.
Bundle.main.loadNibNamed("yourUIView", owner: self, options: nil)?.first as! yourUIView
여기 테이블 뷰 컨트롤러 전체 코드
import UIKit
class RestaurantTableViewController: UIViewController ,UITableViewDataSource,UITableViewDelegate{
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let restaurantTableviewCell = Bundle.main.loadNibNamed("RestaurantTableViewCell", owner: self, options: nil)?.first as! RestaurantTableViewCell
restaurantTableviewCell.restaurantPhoto.image = UIImage(named: "image1")
restaurantTableviewCell.restaurantName.text = "KFC Chicken"
return restaurantTableviewCell
}
// set row height
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 150
}
}
너 끝났어 🙂
답변
신속한 3 및 4 용
let customView = Bundle.main.loadNibNamed("CustomView", owner: nil, options: nil)?.first as? CustomView
답변
대한 스위프트 4.2
NibView 라는 클래스가 있고 관련 nib 파일이 NibView.xib 라고 가정 해 보겠습니다.
class NibView: UIView {
class func getScreen() -> NibView {
let xib = Bundle.main.loadNibNamed(String(describing :self), owner: self, options: nil)
let me = xib![0] as! NibView
return me
}
}
클래스의 인스턴스를 만들고 원하는대로 특정 레이아웃으로보기에 추가
let myView = NibView.getScreen()
self.yourView.addSubview(myView)