Skip to content

Commit 1223f53

Browse files
authored
Merge pull request #725 from Iterable/MOB-7566
MOB-7566: Create a factory method to instantiate an IterableEmbeddedView
2 parents 965ecfb + 8205925 commit 1223f53

File tree

3 files changed

+35
-44
lines changed

3 files changed

+35
-44
lines changed

sample-apps/swift-sample-app/swift-sample-app/Base.lproj/Main.storyboard

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
<deployment identifier="iOS"/>
66
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/>
77
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
8-
<capability name="System colors in document resources" minToolsVersion="11.0"/>
98
<capability name="collection view cell content view" minToolsVersion="11.0"/>
109
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
1110
</dependencies>
@@ -250,9 +249,9 @@
250249
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
251250
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
252251
<subviews>
253-
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4iu-pn-q94" customClass="IterableEmbeddedView" customModule="IterableSDK">
252+
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4iu-pn-q94">
254253
<rect key="frame" x="16" y="70" width="343" height="200"/>
255-
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
254+
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
256255
<constraints>
257256
<constraint firstAttribute="height" constant="200" id="ZEC-f3-vwa"/>
258257
</constraints>
@@ -301,7 +300,7 @@
301300
<subviews>
302301
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BMQ-6N-x3e" customClass="IterableEmbeddedView" customModule="IterableSDK">
303302
<rect key="frame" x="0.0" y="0.0" width="350" height="400"/>
304-
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
303+
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
305304
</view>
306305
</subviews>
307306
<constraints>
@@ -362,8 +361,5 @@
362361
</scenes>
363362
<resources>
364363
<image name="iterableLogo" width="143" height="33"/>
365-
<systemColor name="systemBackgroundColor">
366-
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
367-
</systemColor>
368364
</resources>
369365
</document>

sample-apps/swift-sample-app/swift-sample-app/EmbeddedMessages/EmbeddedMessagesViewController.swift

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class EmbeddedMessagesViewController: UIViewController {
2222

2323
@IBOutlet weak var doneButton: UIButton!
2424
@IBOutlet weak var syncButton: UIButton!
25-
@IBOutlet weak var embeddedBannerView: IterableEmbeddedView!
25+
@IBOutlet weak var embeddedBannerView: UIView!
2626
@IBOutlet weak var carouselCollectionView: UICollectionView!
2727
var cardViews: [IterableEmbeddedMessage] = []
2828

@@ -80,33 +80,29 @@ class EmbeddedMessagesViewController: UIViewController {
8080
}
8181

8282
func loadCardView(_ embeddedView: IterableEmbeddedView, _ embeddedMessage: IterableEmbeddedMessage) {
83-
DispatchQueue.main.async { [self] in
84-
loadEmbeddedView(embeddedView, embeddedMessage: embeddedMessage, type: IterableEmbeddedViewType.card)
85-
}
86-
83+
embeddedView.iterableEmbeddedViewDelegate = self
84+
embeddedView.primaryBtn.isRoundedSides = true
85+
embeddedView.secondaryBtn.isRoundedSides = true
86+
// We are setting the width of buttons as 140 as per our embedded messages width. You can change as per your need
87+
embeddedView.primaryBtn.widthAnchor.constraint(equalToConstant: 140).isActive = true
88+
embeddedView.secondaryBtn.widthAnchor.constraint(equalToConstant: 140).isActive = true
89+
let config = IterableEmbeddedViewConfig(borderCornerRadius: 10)
90+
embeddedView.configure(message: embeddedMessage, viewType: .card, config: config)
8791
}
8892

8993
func loadBannerView(_ embeddedMessage: IterableEmbeddedMessage) {
90-
DispatchQueue.main.async { [self] in
91-
loadEmbeddedView(embeddedBannerView, embeddedMessage: embeddedMessage, type: IterableEmbeddedViewType.banner)
92-
}
93-
94-
}
95-
96-
func loadEmbeddedView(_ embeddedView: IterableEmbeddedView, embeddedMessage: IterableEmbeddedMessage, type: IterableEmbeddedViewType) {
97-
94+
let config = IterableEmbeddedViewConfig(borderCornerRadius: 10)
95+
let embeddedView = IterableEmbeddedView(message: embeddedMessage, viewType: .banner, config: config)
9896
embeddedView.iterableEmbeddedViewDelegate = self
9997
embeddedView.primaryBtn.isRoundedSides = true
10098
embeddedView.secondaryBtn.isRoundedSides = true
10199
// We are setting the width of buttons as 140 as per our embedded messages width. You can change as per your need
102100
embeddedView.primaryBtn.widthAnchor.constraint(equalToConstant: 140).isActive = true
103101
embeddedView.secondaryBtn.widthAnchor.constraint(equalToConstant: 140).isActive = true
104-
105-
let config = IterableEmbeddedViewConfig(borderCornerRadius: 10)
106-
// You must call this method which sets the type for this view which helps render the particular layout of cardview/bannerview
107-
embeddedView.configure(message: embeddedMessage, viewType: type, config: config)
108-
109102

103+
// You must initialize frame here for the embeddedView
104+
embeddedView.frame = CGRect(x: 0, y: 0, width: embeddedBannerView.frame.width, height: embeddedBannerView.frame.height)
105+
embeddedBannerView.addSubview(embeddedView)
110106
}
111107

112108
@IBAction func doneButtonTapped(_: UIButton) {
@@ -156,11 +152,8 @@ extension EmbeddedMessagesViewController: UICollectionViewDelegate, UICollection
156152
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
157153

158154
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "IterableEmbeddedCardViewCell", for: indexPath) as! IterableEmbeddedCardViewCell
159-
if indexPath.row < cardViews.count {
160-
let cardView = cardViews[indexPath.row]
161-
loadCardView(cell.embeddedCardView, cardView)
162-
}
163-
155+
let cardView = cardViews[indexPath.row]
156+
loadCardView(cell.embeddedCardView, cardView)
164157
return cell
165158
}
166159

swift-sdk/uicomponents/IterableEmbeddedView.swift

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ public class IterableEmbeddedView:UIView {
4545
/// IterableEmbeddedView Image View.
4646
@IBOutlet weak public var imgView: UIImageView!
4747
@IBOutlet weak public var cardImageView: UIImageView!
48-
@IBOutlet weak var cardImageTopConstraint: NSLayoutConstraint!
49-
@IBOutlet weak var titleToTopConstraint: NSLayoutConstraint!
48+
@IBOutlet var cardImageTopConstraint: NSLayoutConstraint!
49+
@IBOutlet var titleToTopConstraint: NSLayoutConstraint!
5050

5151
@IBOutlet weak public var imageViewWidthConstraint:NSLayoutConstraint!
5252
@IBOutlet weak public var imageViewHeightConstraint:NSLayoutConstraint!
@@ -108,10 +108,16 @@ public class IterableEmbeddedView:UIView {
108108

109109
// MARK: IterableEmbeddedView init method
110110
/// IterableEmbeddedView init method
111-
required init?(coder aDecoder: NSCoder) {
112-
super.init(coder: aDecoder)
113-
xibSetup()
114-
}
111+
required init?(coder aDecoder: NSCoder) {
112+
super.init(coder: aDecoder)
113+
xibSetup()
114+
}
115+
116+
public init(message: IterableEmbeddedMessage, viewType: IterableEmbeddedViewType, config: IterableEmbeddedViewConfig?) {
117+
super.init(frame: CGRectZero)
118+
xibSetup()
119+
configure(message: message, viewType: viewType, config: config)
120+
}
115121

116122
func xibSetup() {
117123
self.contentView = self.loadViewFromNib()
@@ -187,14 +193,10 @@ public class IterableEmbeddedView:UIView {
187193
self.embeddedMessageTitle = message.elements?.title
188194
self.embeddedMessageBody = message.elements?.body
189195

190-
if let _ = self.EMimage {
191-
self.loadViewType(viewType: viewType)
192-
} else {
193-
if let imageUrl = message.elements?.mediaUrl {
194-
if let url = URL(string: imageUrl) {
195-
loadImage(from: url, withViewType: viewType)
196-
self.EMimage?.accessibilityLabel = message.elements?.mediaUrlCaption
197-
}
196+
if let imageUrl = message.elements?.mediaUrl {
197+
if let url = URL(string: imageUrl) {
198+
loadImage(from: url, withViewType: viewType)
199+
self.EMimage?.accessibilityLabel = message.elements?.mediaUrlCaption
198200
}
199201
}
200202

0 commit comments

Comments
 (0)