Skip to content

Instantly share code, notes, and snippets.

  • Star 9 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save SlaunchaMan/815b3e7214ceb2000e64 to your computer and use it in GitHub Desktop.
Getting around Swift 2’s lack of compatibility with vararg methods for complication text providers.
@interface CLKTextProvider (NNNCompoundTextProviding)
+ (nonnull CLKTextProvider *)nnn_textProviderByJoiningProvider:(nonnull CLKTextProvider *)provider1 andProvider:(nonnull CLKTextProvider *)provider2 withString:(nullable NSString *)joinString;
@end
@implementation CLKTextProvider (NNNCompoundTextProviding)
+ (nonnull CLKTextProvider *)nnn_textProviderByJoiningProvider:(nonnull CLKTextProvider *)provider1 andProvider:(nonnull CLKTextProvider *)provider2 withString:(nullable NSString *)joinString
{
NSString *textProviderToken = @"%@";
NSString *formatString;
if (joinString != nil) {
formatString = [NSString stringWithFormat:@"%@%@%@",
textProviderToken,
joinString,
textProviderToken];
}
else {
formatString = [NSString stringWithFormat:@"%@%@",
textProviderToken,
textProviderToken];
}
return [self textProviderWithFormat:formatString, provider1, provider2];
}
@end
@gongzhang
Copy link

init(format:_:) can be used to create multi-color text. (Top left corner)

@GeylanKalafMohe
Copy link

Can someone post an example how to use the init(format:_:)? @gongzhang @UInt2048

@gongzhang
Copy link

gongzhang commented May 13, 2021

let text1 = CLKSimpleTextProvider(text: "red")
text1.tintColor = .red

let text2= CLKSimpleTextProvider(text: "green")
text2.tintColor = .green

// secret sauce:
// just pass CLKTextProvider objects as arguments
let finalText = CLKTextProvider(format: "%@ and %@", text1, text2)

@GeylanKalafMohe
Copy link

Thank you very much! Just wanted to add how to use it with CLKRelativeDateTextProvider:

let myComplicationTemplate = CLKComplicationTemplateUtilitarianLargeFlat()
let dateProvider = CLKRelativeDateTextProvider()

dateProvider.date = Date()
dateProvider.calendarUnits = [.hour, .minute]
dateProvider.relativeDateStyle = .naturalAbbreviated

let finalText = CLKTextProvider(format: "GBT * %@", dateProvider)

myComplicationTemplate.textProvider = finalText

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment