- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有没有人为 iOS 6 UICollectionView 实现过装饰 View ?不可能
查找有关在网络上实现装饰 View 的任何教程。基本上在我的应用程序中,我有多个部分,我只想在每个部分后面显示一个装饰 View 。这应该很容易实现,但我没有运气。这让我发疯...谢谢。
câu trả lời hay nhất
đây là một 集合 View 布局装饰 View 教程在 Swift 中(这是 Swift 3,Xcode 8 种子 6)。
装饰 View 不是 UICollectionView 功能;它们本质上属于 UICollectionViewLayout。没有 UICollectionView 方法(或委托(delegate)或数据源方法)提到装饰 View 。 UICollectionView 对它们一无所知;它只是按照它所说的去做。
要提供任何装饰 View ,您需要一个 UICollectionViewLayout 子类;这个子类可以自由定义自己的属性并委托(delegate)协议(protocol)方法来自定义其装饰 View 的配置方式,但这完全取决于您。
为了说明这一点,我将继承 UICollectionViewFlowLayout 以在集合 View 的内容矩形的顶部添加一个标题标签。这可能是装饰 View 的愚蠢使用,但它完美地说明了基本原理。为简单起见,我将从对整个内容进行硬编码开始,使客户端无法自定义此 View 的任何方面。
在布局子类中实现装饰 View 有四个步骤:
register(_:forDecorationViewOfKind:)
向布局(不是集合 View )注册 UICollectionReusableView 子类.布局的初始值设定项是执行此操作的好地方。 layoutAttributesForDecorationView(ofKind:at:)
返回定位 UICollectionReusableView 的布局属性。要构造布局属性,请调用 init(forDecorationViewOfKind:with:)
并配置属性。 layoutAttributesForElements(in:)
使得 layoutAttributesForDecorationView(ofKind:at:)
的结果包含在返回的数组中。 layoutAttributesForElements(in:)
,它发现结果数组包含指定类型的装饰 View 的布局属性。集合 View 对装饰 View 一无所知,因此它返回到布局,请求这种装饰 View 的实际实例。您已经注册了这种装饰 View 以对应于您的 UICollectionReusableView 子类,因此您的 UICollectionReusableView 子类被实例化并返回该实例,并且集合 View 根据布局属性对其进行定位。
class MyTitleView : UICollectionReusableView {
weak var lab : UILabel!
override init(frame: CGRect) {
super.init(frame:frame)
let lab = UILabel(frame:self.bounds)
self.addSubview(lab)
lab.autoresizingMask = [.flexibleWidth, .flexibleHeight]
lab.font = UIFont(name: "GillSans-Bold", size: 40)
lab.text = "Testing"
self.lab = lab
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
private let titleKind = "title"
private let titleHeight : CGFloat = 50
private var titleRect : CGRect {
return CGRect(10,0,200,self.titleHeight)
}
ghi đè init() {
siêu.init()
self.register(MyTitleView.self, forDecorationViewOfKind:self.titleKind)
}
layoutAttributesForDecorationView(ofKind:at:)
:
override func layoutAttributesForDecorationView(
ofKind elementKind: String, at indexPath: IndexPath)
-> UICollectionViewLayoutAttributes? {
if elementKind == self.titleKind {
let atts = UICollectionViewLayoutAttributes(
forDecorationViewOfKind:self.titleKind, with:indexPath)
atts.frame = self.titleRect
return atts
}
trả về nil
}
layoutAttributesForElements(in:)
;这里的索引路径是任意的(我在前面的代码中忽略了它):
override func layoutAttributesForElements(in rect: CGRect)
-> [UICollectionViewLayoutAttributes]? {
var arr = super.layoutAttributesForElements(in: rect)!
if let decatts = self.layoutAttributesForDecorationView(
ofKind:self.titleKind, at: IndexPath(item: 0, section: 0)) {
if rect.intersects(decatts.frame) {
arr.append(decatts)
}
}
return arr
}
tiêu đề
属性(property):
class MyFlowLayout : UICollectionViewFlowLayout {
var title = ""
// ...
}
func setUpFlowLayout(_ flow:UICollectionViewFlowLayout) {
flow.headerReferenceSize = CGSize(50,50)
flow.sectionInset = UIEdgeInsetsMake(0, 10, 10, 10)
(flow as? MyFlowLayout)?.title = "States" // *
}
tiêu đề
属性,其值需要以某种方式传达给我们的 MyTitleView 实例。但这什么时候可能发生?我们不负责实例化 MyTitleView;当集合 View 在幕后询问实例时,它会自动发生。 MyFlowLayout 实例和 MyTitleView 实例没有相遇的时刻。
class MyTitleViewLayoutAttributes : UICollectionViewLayoutAttributes {
var title = ""
}
layoutAttributesForDecorationView
的实现.当我们实例化布局属性对象时,我们实例化我们的子类并设置它的
tiêu đề
属性(property):
override func layoutAttributesForDecorationView(
ofKind elementKind: String, at indexPath: IndexPath) ->
UICollectionViewLayoutAttributes? {
if elementKind == self.titleKind {
let atts = MyTitleViewLayoutAttributes( // *
forDecorationViewOfKind:self.titleKind, with:indexPath)
atts.title = self.title // *
atts.frame = self.titleRect
return atts
}
trả về nil
}
apply(_:)
方法。这将在集合 View 配置装饰 View 时调用——以布局属性对象作为其参数!所以我们拉出
tiêu đề
并将其用作我们标签的文本:
class MyTitleView : UICollectionReusableView {
weak var lab : UILabel!
// ... the rest as before ...
override func apply(_ atts: UICollectionViewLayoutAttributes) {
if let atts = atts as? MyTitleViewLayoutAttributes {
self.lab.text = atts.title
}
}
}
isEqual(_:)
在 MyTitleView 中区分不同的标题。所有这些都留给读者作为练习。
关于ios - UICollectionView 装饰 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12810628/
Làm thế nào để một thiết bị IO biết rằng giá trị trong bộ nhớ thuộc về nó đã thay đổi trong IO được ánh xạ vào bộ nhớ? ? Ví dụ: giả sử rằng địa chỉ bộ nhớ 0 được dành riêng để giữ màu nền của thiết bị VGA. Khi chúng ta thay đổi giá trị trong bộ nhớ[0], VGA
Tôi hiện đang phát triển một ứng dụng iOS sử dụng sdk Facebook để đăng nhập (thông qua FBLoginView). Mọi thứ đều hoạt động tốt ngoại trừ những người có phiên bản facebook cũ hơn. Khi họ nhấn nút "Đăng nhập bằng Facebook", anh ấy
Giả sử tôi có: đây - là một - ví dụ - với một số - dấu gạch ngangNSRange sẽ chọn phiên bản đầu tiên của "-" bằng cách sử dụng `rangeOfString:@"-", nhưng nếu tôi chỉ muốn phiên bản cuối cùng
Card.io SDK cung cấp các thông tin chi tiết sau: số thẻ, ngày hết hạn, tháng, năm, CVV và mã bưu chính. Làm cách nào tôi có thể lấy tên quốc gia từ SDK này. - (void)userDidProvideCreditCardInfo:(Ô tô
Làm cách nào để ứng dụng iOS tải xuống hình ảnh từ dịch vụ web và cài đặt chúng trên thiết bị iOS của người dùng trong quá trình cài đặt? Có thể được không? Câu trả lời hay nhất Bạn không có quyền kiểm soát việc cài đặt ứng dụng trên thiết bị của người dùng, do đó không thể tải xuống dữ liệu bổ sung trong quá trình cài đặt. Chỉ cần khởi chạy ứng dụng lần đầu tiên sau khi cài đặt
Tôi đã từng phát triển một sản phẩm iOS dành cho doanh nghiệp mà công ty chúng tôi đã bán cho các doanh nghiệp lớn để nhân viên của họ sử dụng. Ứng dụng này có sẵn thông qua AppStore và người dùng doanh nghiệp được cung cấp hồ sơ dành riêng cho công ty (chứa hồ sơ ứng dụng) để cho phép
Tôi đang cố gắng tích hợp SDK Card.io vào ứng dụng iOS của mình. Tôi muốn thực hiện một bản địa hóa đơn giản cho giao diện người dùng CardIO, chẳng hạn như thay đổi tiêu đề nút hủy hoặc văn bản nhắc "Giữ thẻ tín dụng của bạn ở đây". Tôi tìm thấy cái này trên github
Tôi đang sử dụng các lớp CardIOView và CardIOViewDelegate và không có BOOL nào có thể được đặt thành CÓ để quét collCardholderName. Tôi có thể thấy nó trong CardIOP
Tôi có một ứng dụng voip được tích hợp với bộ công cụ gọi điện. Mỗi lần tôi gọi từ ứng dụng voip của mình, một bản ghi cuộc gọi mới gần đây sẽ được tạo trong ứng dụng điện thoại gốc. Tôi cũng có danh bạ tùy chỉnh trong ứng dụng voip (điện thoại nên
Làm cách nào để ứng dụng iOS biết đã có bàn phím trên màn hình khi ứng dụng được mở? Sau khi ứng dụng đang chạy, nó có thể nhận được thông báo hiển thị/ẩn bàn phím. Tuy nhiên, nếu ứng dụng được mở dưới dạng ứng dụng phụ ở chế độ chia đôi màn hình và ứng dụng chính đã hiển thị bàn phím thì ứng dụng phụ sẽ không hiển thị
Tôi gặp lỗi sau trong trình mô phỏng: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
Như được trình bày trong tài liệu của Apple, việc giao tiếp với các phụ kiện được chứng nhận (được Apple chứng nhận) có thể được thực hiện thông qua EAAccessory Framework. Nhưng tôi hơi bối rối vì một số bài đăng cho tôi biết nó cũng hoạt động qua CoreBluetoo
Mặc dù các trình gỡ lỗi ngày nay rất tốt nhưng đôi khi cách tốt nhất để tìm hiểu những gì đang diễn ra trong ứng dụng của bạn vẫn là NSLog cũ. Việc này thật dễ dàng khi bạn kết nối với máy tính; Xcode sẽ giúp bật lên bảng Log Viewer và bạn đã sẵn sàng. khi bạn không ở nơi làm việc
Trong ứng dụng iOS của tôi, tôi xác định một số điểm ưa thích. Một số trong số chúng có tên là đèn hiệu Kontakt.io, được liên kết với một PoI cụ thể (ý tôi là tên thường được gắn vào nhãn đèn hiệu). Bây giờ tôi muốn khám phá các đèn hiệu gần đó,
Tôi đang tạo plugin trigger.io để nhận lời nhắc cảnh báo. Cố gắng trả lại dữ liệu từ lời nhắc cảnh báo. Đây là mã của tôi: // Nhắc + (void)show_Prompt:(ForgeTask*)task{
Xin chào, tôi mới làm quen với Apple iOS. Mình đã đọc và tìm kiếm rất nhiều bài viết về thông báo đẩy nhưng không tìm thấy thông tin nào về các bản cập nhật mới của APNS từ io4 lên ios 6. Ai có thể cung cấp cho tôi APNS cách thực hiện trong ios không
Chiều cao của UITabBar dường như đã thay đổi giữa iOS 7 và 8/9/10/11. Tôi đăng câu hỏi này để giúp người khác dễ dàng tìm thấy câu trả lời. Sau đó: iOS 8/9/10/11 trên iPhone và iPad
Tôi nghĩ tôi có thể sử dụng các Bảng phân cảnh khác nhau cho các phiên bản iOS khác nhau. Do có sự khác biệt về UI nên mình sẽ tạo Storyboard tiếp theo: Main_iPhone.storyboard Main_iPad.st
Tôi đang viết nội dung nào đó trong đó tôi sẽ sử dụng một phần bản âm thanh từ thư viện iTunes của thiết bị để phủ lên sự kết hợp của 2 video, ví dụ: AVMutableComposition* mixComposition = [[AVMutableC
Tôi đã tạo một chương trình iOS đơn giản có khả năng biên dịch mượt mà và chạy tốt trên trình mô phỏng iPad. Chương trình tương tự không biên dịch được khi tôi yêu cầu XCode 4 sử dụng thiết bị iPad được kết nối của mình. Có vẻ như vấn đề xảy ra khi tôi cố gắng sử dụng iPad kèm theo
Tôi là một lập trình viên xuất sắc, rất giỏi!